C# 中string & StringBuilder性能差異

2024年2月6日 19点热度 0人点赞

今天在拼接一個字符串寫入csv文件時候發現string 的方式耗時巨大,在小量字符串拼接的時候看不出,當字符串拼接一多,性能差異巨大:

於是用它跟stringbuilder 進行一個比對:

Stopwatch sw = new Stopwatch();
sw.Start();
string content = "";
for(int i=0;i<40_000;i  )
{
	content = "123456,-99.999\r\n";
  // 編譯器優化後的代碼為:content = content.Concat(string1,stirng2);
}
long content_time = sw.ElapsedMilliseconds;
sw.Stop();
(content_time*0.001).Dump("String 拼接耗時(s)");
StringBuilder sb = new StringBuilder();
Stopwatch sw2 = new Stopwatch();
sw2.Start();
for(int i=0;i<400_000;i  )
{
	sb.Append("123456,-99.999\r\n");
}
sw2.Stop();
(sw2.ElapsedMilliseconds*0.001).Dump("StringBuilder 拼接耗時(s)");

得出的結果是:

stringBuilder 拼接的字符串是40萬個,string拼接的是4萬個,耗時差異也是比較明顯的。

stackflow 上的解析為:

簡而言之就是string 是不可變(Immutable)的,拼接的時候就是創建一個新的字符串。

stringbuilder 是可變長度(Mutable)的,自然效率就高;