雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

C# 中string和StringBuilder性能差异

2024-07-22 56

在拼接一个字符串写入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)的,自然效率就高。

更新于:4个月前
赞一波!

文章评论

评论问答