熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# String StringBuider 解惑

2013-11-13 10:21:30  來源: .NET編程 

  一個常問的問題

  

  A=B+C+D;

  ABCD都是string對象

  這是討論string和stringbuilder的一個常用例子也喜歡以此來說明stringbuilder比string好

  我們說這種方式創建了ABCDB+CB+C+D這樣個對象

  用stringbuilder創建一個對象append就行

  但實際上

  stringbuilder sb =new stringbuilder();

  sbAppend(A);

  sbAppend(B);

  sbAppend(C);

  sbAppend(D);

  sbToString();

  這樣也創建了個對象當然少創建一個對象也是收獲

  StringBuilder比String好的地方在於她初始化的時候分配了一個相對大的空間如果新加一個對象空間不夠的話會再分配一個是原來倍大小的一個空間然後把原來空間的數據復制到新的空間這個過程是有損性能的

  所以StringBuilder適合append一些差不多大小的對象這樣不會引起頻繁的內存復制操作

  還是回到開始

  A=B+C+D;

  這種寫法真的創建了個對象嗎???????

  不一定!!!!

  在編譯器裡面這句可能被優化成A = StringConcat(new object[]{BCD});

  所以這個例子並不適合於說string和StringBuilder的區別

  那StringBuilder到底什麼時候用呢

  A=B;

  A +=C;

  A += D;

  當有大量的+=的時候我們才應該考慮StringBuilder

  所以我們的StringBuider建議裡說循環裡面不要用String因為通常循環裡面我們做的事情就是+=

  如果只是一次操作幾個對象+的話實際上編譯器會優化A=B+C+D這種表達式不需要去用StringBuilder

  一個常問的問題

  

  A=B+C+D;

  ABCD都是string對象

  這是討論string和stringbuilder的一個常用例子也喜歡以此來說明stringbuilder比string好

  我們說這種方式創建了ABCDB+CB+C+D這樣個對象

  用stringbuilder創建一個對象append就行

  但實際上

  stringbuilder sb =new stringbuilder();

  sbAppend(A);

  sbAppend(B);

  sbAppend(C);

  sbAppend(D);

  sbToString();

  這樣也創建了個對象當然少創建一個對象也是收獲

  StringBuilder比String好的地方在於她初始化的時候分配了一個相對大的空間如果新加一個對象空間不夠的話會再分配一個是原來倍大小的一個空間然後把原來空間的數據復制到新的空間這個過程是有損性能的

  所以StringBuilder適合append一些差不多大小的對象這樣不會引起頻繁的內存復制操作

  還是回到開始

  A=B+C+D;

  這種寫法真的創建了個對象嗎???????

  不一定!!!!

  在編譯器裡面這句可能被優化成A = StringConcat(new object[]{BCD});

  所以這個例子並不適合於說string和StringBuilder的區別

  那StringBuilder到底什麼時候用呢

  A=B;

  A +=C;

  A += D;

  當有大量的+=的時候我們才應該考慮StringBuilder

  所以我們的StringBuider建議裡說循環裡面不要用String因為通常循環裡面我們做的事情就是+=

  如果只是一次操作幾個對象+的話實際上編譯器會優化A=B+C+D這種表達式不需要去用StringBuilder


From:http://tw.wingwit.com/Article/program/net/201311/13366.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.