C# 为了使StringBuilder更高效,您需要添加多少字符串?

C# 为了使StringBuilder更高效,您需要添加多少字符串?,c#,C#,可能重复: 据我所知,字符串是不可变的,因此如果您执行“一”+“二”,而不是重用这两个字符串的内存,则会创建一个值为“一-二”的新字符串。如果您执行以下操作,这将成为一个问题: String output = ""; for (int i = 0; i < 20; i++){ output = output + ii.toString(); } 字符串输出=”; 对于(int i=0;i

可能重复:

据我所知,字符串是不可变的,因此如果您执行
“一”+“二”
,而不是重用这两个字符串的内存,则会创建一个值为“一-二”的新字符串。如果您执行以下操作,这将成为一个问题:

String output = "";
for (int i = 0; i < 20; i++){
    output = output + ii.toString();
}
字符串输出=”;
对于(int i=0;i<20;i++){
输出=输出+ii.toString();
}
因为创建并丢弃了19(或39?)个字符串以生成最终的所需输出

字符串生成器是可变的,因此您可以高效地将字符串添加到一起,然后在完成后将它们转换为字符串


我假设在创建字符串生成器时会有一些开销,而且今天使用的聪明的编译器优化了许多字符串添加问题。所以我的问题是:在使用StringBuilder变得更有效之前,我需要添加多少字符串?还是我的假设不正确?

这个问题的答案是——说“几十个”是阈值


与这个问题的另一个答案相联系的是这个链接——它以“没关系”结尾

这属于微优化的范畴——如果你真的有性能问题,并且确定字符串连接是问题所在,那就要担心了。我几年前就玩过这个(字符串连接)。据我记忆所及,差异从1000个字符串片段开始。最肯定的是一个重复,尽管鉴于该字符串,我不确定声明的重复是否是一个好的重复。Concat使用StringBuilder进行投标。