C#+ =(加上等于)(加法分配)工作非常慢,当字符串太长时?

stc*_*flw 8 c# string performance assignment-operator

我有一个for循环,我做的是这个.

forloop ( loop 7000 times)
{
x += 2000_char_long_string;
}
Run Code Online (Sandbox Code Playgroud)

代码在这个forloop中持续很长时间,可能超过1分钟.我怎么解决这个问题?

谢谢.

Kob*_*obi 45

使用StringBuilder.

StringBuilder sb = new StringBuilder();
for(int i=0; i< 200; i++){
   sb.append(longString);
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)

当您+=在字符串上使用时,您将继续创建新字符串,并继续定位更大和更大的内存块.这就是为什么操作这么慢.

  • 改进的方法是设定初始容量.如果要分配7000*2000个字符串,则将初始容量设置为14000000以避免重复生成缓冲区. (6认同)

bru*_*nde 14

使用a StringBuilder作为@Kobi引用,您仍然可以通过初始化来提高性能.看来你可以string提前确定最终的大小.

StringBuilder sb = new StringBuilder(7000*2000);
for(int i=0; i< 7000; i++){
   sb.append(2000_char_long_string);
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)