1. 程式人生 > 其它 >C# String與StringBuilder

C# String與StringBuilder

String

string本身是不可改變的,它只能賦值一次,每一次內容發生改變,都會生成一個新的物件,然後原有的物件引用新的物件,而每一次生成新物件都會對系統性能產生影響,這會降低.NET編譯器的工作效率。

 String s1 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });

StringBuilder

StringBuilder類則不同,每次操作都是對自身物件進行操作,而不是生成新的物件,其所佔空間會隨著內容的增加而擴充,這樣,在做大量的修改操作時,不會因生成大量匿名物件而影響系統性能。

 StringBuilder sb = new
StringBuilder(5); //當指定分配大小之後,效能就會得到提升。如果超過指定大小系統會當前大小倍增,也就10,15,20。建議指定大小

在記憶體中的分配

字串一旦建立就不可修改大小,所以對字串新增或刪除操作比較頻繁的話。那就不要用String而用StringBuilder。

  String a1 = "abc";  //分配固定的記憶體大小
            a1+="def";  //銷燬原先的資料再來分配,代價比較昂貴
 
  StringBuilder sb = new StringBuilder(20);  //指定分配大小
  sb.Append('abc');  //分配到堆區
  sb.Append('def');  //不會被銷燬,而是直接追加到後面。

String物件是不可改變的。每次使用System.String類中的方法之一或者是進行運算時(如賦值、拼接等),都要在記憶體中建立一個新的字串物件,這就需要為該新物件分配記憶體空間,而StringBuilder則不會。在需要對字串執行重複修改操作時,與建立新的 String 物件相關的系統開銷可能會非常昂貴。如果要修改字串而不建立新的物件,則可以使用 System.Text.StringBuilder 類。例如,當在一個迴圈中將許多字串連線在一起時,使用 StringBuilder 類可以提升效能。

文章轉載自:

快速開發平臺
地址:https://www.hocode.com/