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

string和StringBuilder比較

2013-11-13 09:42:39  來源: .NET編程 

  string與StringBuilder的區別

  string對象是不可變的包括長度或者其中的任何字符都是不可以改變的

  string @string = a;

  @string = @string + b;

  以上代碼讓人誤以為@string是能夠增加長度的其實第二句代碼是重新創建了一個新的對象而第一個對象被丟棄它將成為垃圾收集器收集的對象

  C#中不能使用new string()來構造一個string對象假如可以以上代碼相當於

  string @string = new string(a);

  @string = new string(a+b);

  StringBuilder是可變的它是專門用於對字符串和字符執行動態操作的類

  用StringBuilder實現:

  StringBuilder stringBuilder = new StringBuilder(a);

  stringBuilderAppend(b);

  StringBuilder在內部有一個足夠長的字符數組用於存放字符串對象當字符串長度沒超過字符數組長度時所有操作都是針對同一個字符數組當長度超過時StringBuilder將自動創建一個更長的數組把原來的數據復制到新數組中

  字符串操作性能比較

  讓string和StringBuilder執行相同的操作:循環追加一個字符串a

  public static void CompareString()

  {

  UseString();

  UseStringBuilder();

  }

  private static void UseString()

  {

  string @string = ;

  DateTime startTime = DateTimeNow;

  for (int i = ; i < ; i++)

  {

  @string += a;

  }

  DateTime endTime = DateTimeNow;

  TimeSpan timeSpan = endTime startTime;

  ConsoleWriteLine(timeSpanToString());

  }

  private static void UseStringBuilder()

  {

  StringBuilder stringBuilder = new StringBuilder();

  DateTime startTime = DateTimeNow;

  for (int i = ; i < ; i++)

  {

  stringBuilderAppend(a);

  }

  DateTime endTime = DateTimeNow;

  TimeSpan timeSpan = endTime startTime;

  ConsoleWriteLine(timeSpanToString());

  }

  運行CompareString()函數得到以下結果

   運行次數 時間 string 萬次 秒 StringBuilder 一百萬次

  結論使用StringBuilder對字符串動態追加的速度是string的倍左右

  補充針對不同的字符串長度和不同的操作比如Remove性能表現會各不一樣需要一個一個測試


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