今天在拼接一個字符串寫入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)");
得出的結果是:
![](https://news.xinpengboligang.com/upload/keji/80a364b47ba8abd2759c12e7d7e1dfd1.jpeg)
stringBuilder 拼接的字符串是40萬個,string拼接的是4萬個,耗時差異也是比較明顯的。
stackflow 上的解析為:
![](https://news.xinpengboligang.com/upload/keji/c59fc74df28878703aaba93a67cc419f.jpeg)
簡而言之就是string 是不可變(Immutable)的,拼接的時候就是創建一個新的字符串。
stringbuilder 是可變長度(Mutable)的,自然效率就高;