[C#] string 和 StringBuilder 的比較

2222345345發表於2018-08-21

String Vs StringBuilder

string

  • 名字空間為System
  • 例項不可變(只讀)
  • 當值連續變化時,會出現效能降級
  • 執行緒安全

StringBuilder(可變的string)

  • 所在名字空間為System.Text
  • 例項可變
  • 當對存在的例項進行修改時,顯示出更好的效能

下面的例子,將建立2001個字串,而其中的2000個都將被捨棄。

string s = string.Empty;
for (i = 0; i < 1000; i++) {
  s += i.ToString() + " ";
}

而改成使用StringBuilder就能減少頻繁的記憶體分配,從而改善效能:

StringBuilder sb = new StringBuilder();
for (i = 0; i < 1000; i++) {
  sb.Append(i);
  sb.Append(' ');
}

簡而言之,string物件不可變,對字串的操作都將在記憶體中產生副本,從而影響效能,StringBuilder相反,至於執行緒安全,不清楚使用場景,應該是字串變數如果不重新賦值,可以保證內容不會被中途改變。


[1] https://stackoverflow.com/questions/3069416/difference-between-string-and-stringbuilder-in-c-sharp

相關文章