簡述C#中Builder和Buffer類的用法詳解

來源:互聯網
上載者:User
這篇文章給大家簡單介紹下C#中String StringBuilder StringBuffer三個類的用法,需要的的朋友參考下吧

String和StringBuilder和StringBuffer,這三個都是值得深究一翻的,可能很多人會說,實在不行的話,都全部用StringBuilder,啥事沒有,我不能說你的想法事不正確的,但是我可以給出更好的建議。下面簡單介紹一下這三個類。

String類

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

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

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

把String對象,一旦賦值就不可改變(叫做字串的恒定性),賦值完了之後,再對String進行拼接,賦值等,都會再記憶體裡面重新分配一個新的記憶體空間。

StringBuilder

基於上面的問題,string類在重新賦值會重新去分配記憶體空間,所以為瞭解決這個問題,微軟推出了一個StringBuilder的類。可以看看StringBuilder類是如何做到不重新分配記憶體的呢。

通過閱讀StringBuiler類的實現,我們可以發現

internal const int DefaultCapacity = 0x10; StringBuilder類,預設的大小是16,意思就是說我們如果不指定StringBuilder長度,超過16個長度,就會重新去分配一次記憶體。具體實現可以看看StringBuilder類的Append源碼。

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

總結:平時寫代碼的時候應該要注意裝箱拆箱操作,注意stringBuilder的使用。

【相關推薦】

1. 精選:“php程式員工具箱”V0.1版本下載

2. ASP免費視頻教程

3. 李炎恢ASP基礎視頻教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.