1. 程式人生 > >C#基礎-StringBuilder類

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大。就按照指定的空間進行分配。

所以,什麼時候指定字串的容量,要根據實際情況決定。