C#基礎-StringBuilder類
StringBuilder類位於System.Text名稱空間下,使用StringBuilder類每次重新生成新字串時不時再生成一個新例項,而是直接在原來字串佔用的記憶體空間上進行處理,而且它可以動態地分配佔用的記憶體空間大小。因此,在字串處理操作比較多的情況下,使用StringBuilder類可以大大提交系統的效能。
預設情況下,編譯器會自動為StringBuilder型別的字串分配一定的記憶體容量,也可以在程式中直接修改其佔用的位元組數。下面是使用StringBuilder類的一個例子。
【例】使用StringBuilder類
using System; using System.Text; namespace ConsoleTest { class TestStringBuild { public static void Main() { StringBuilder str = new StringBuilder(); Console.WriteLine("字串是:“{0}”,長度:{1}",str,str.Length); Console.WriteLine("記憶體容量分配:{0}",str.Capacity); str=new StringBuilder("test string."); Console.WriteLine("字串是:"{0}",長度:{1}",str,str.length); Console.WriteLine("記憶體容量分配:{0}",str.Capacity); str.Append("append another string."); Console.WriteLine("字串是:"{0}",長度:{1}",str,str.length); Console.WriteLine("記憶體容量分配:{0}",str.Capacity); str=new StringBuilder("test string.",5); Console.WriteLine("字串是:"{0}",長度:{1}",str,str.length); Console.WriteLine("記憶體容量分配:{0}",str.Capacity); str=new StringBuilder("test string.",40); Console.WriteLine("字串是:"{0}",長度:{1}",str,str.length); Console.WriteLine("記憶體容量分配:{0}",str.Capacity); } } }
輸出結果為:
字串是:"",長度:0
記憶體容量分配:16
字串是:"test string.",長度:12
記憶體容量分配:16
字串是:"test string.append another string.",長度:34
記憶體容量分配:35
字串是:"test string.",長度:12
記憶體容量分配:20
字串是:"test string.",長度:12
記憶體容量分配:40
在這個例子中,建立一個新例項時,其長度為0,記憶體分配16個字元的容量,然後又建立了一個長度為12的字串,記憶體分配仍然是16個字元的容量。但是在添加了一個字串使總長度為34(超過16個字元的容量)以後,記憶體會自動根據新字串的大小重新為其分配容量。
然後指定了一個長度為12的字串,併為其分配5個字元的空間,顯然不能儲存12個字元,於是系統就成倍地增加指定的容量。從5變成10,仍然不夠,再從10變成20,結果給長度為12的字串分配了20個字元的空間。
然後又給長度為12的字串指定了40個字元的空間,系統檢測到40比12大。就按照指定的空間進行分配。
所以,什麼時候指定字串的容量,要根據實際情況決定。