溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Builder和Buffer類的使用方法

發(fā)布時間:2020-10-13 16:02:13 來源:億速云 閱讀:175 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關C#中Builder和Buffer類的使用方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    String類

在我們平時的使用當中很容易不注意到的是,自己寫的代碼很容易發(fā)生了裝箱的操作(把值類型轉(zhuǎn)換為引用類型)。就比如很常見的,一個字符串拼接

string str=9+"test"; 通過查看IL代碼可以知道這里發(fā)生了裝箱的操作。所以建議使用(在把值類型轉(zhuǎn)換為字符串的時候,記得用ToString方法)。所以平時寫代碼的時候,要注意下,裝箱和拆箱的操作(之后推出的泛型集合不就是為了解決裝箱和拆箱的操作)。裝箱操作的過程:把值類型放到托管堆里面分配內(nèi)存,除了值類型本身所分配的內(nèi)存外,內(nèi)存總量還要加上類型對象指針和同步索引塊所占用的內(nèi)存,之后再將值類型的值重新分配到堆內(nèi)存當中,最后再返回引用類型的對象的地址。

我們知道很多類型(值類型)都自帶了一個ToString方法,為毛用這個就不會發(fā)生裝箱操作呢,很簡單的一個道理,不是有人和你說String是特殊的值類型(雖然他是引用類型),C#語言的設計者,為了做到這一點,他想出了這個方法

把String對象,一旦賦值就不可改變(叫做字符串的恒定性),賦值完了之后,再對String進行拼接,賦值等,都會再內(nèi)存里面重新分配一個新的內(nèi)存空間。

 StringBuilder

基于上面的問題,string類在重新賦值會重新去分配內(nèi)存空間,所以為了解決這個問題,微軟推出了一個StringBuilder的類。可以看看StringBuilder類是如何做到不重新分配內(nèi)存的呢。

通過閱讀StringBuiler類的實現(xiàn),我們可以發(fā)現(xiàn)

  internal const int DefaultCapacity = 0x10; StringBuilder類,默認的大小是16,意思就是說我們?nèi)绻恢付⊿tringBuilder長度,超過16個長度,就會重新去分配一次內(nèi)存。具體實現(xiàn)可以看看StringBuilder類的Append源碼。

C#中Builder和Buffer類的使用方法

從代碼里面可以看出,我們平時用StringBuilder的時候,一定要指定合適的長度。源碼里面的fixed語句塊(通俗的來講,可以禁止垃圾回收把變量地址給回收了)。  

關于C#中Builder和Buffer類的使用方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

buf
AI