我已经开始使用StringBuilder
,因为我听说它在输出字符串方面更加优化。
我的问题是关于+
的使用,因为字符串是不可变的,将它们添加到一起时会分配一个新的字符串。
如果我在StringBuilder.Append
函数的参数中使用此运算符,则我认为它实际上具有相同的开销。
例如:
string animal1 = "dog";
string animal2 = "cat";
stringBuilder.Append("Today I saw a " + animal1 + " and " + animal2);
我的猜测是,这可能会将这些文本串联在一起以分配内存。
我认为更有效(尽管很冗长)的方法是:
stringBuilder.Append("Today I saw a");
stringBuilder.Append(animal1);
stringBuilder.Append(" and ");
stringBuilder.Append(animal2);
这正确吗?
答案 0 :(得分:2)
第二个示例中有一个错误,因为您错过了“今天我看到一个”和animal1
之间的空格。除非您过度执行此操作(在多次迭代的循环内),否则可能不会发现可测量的差异,因此您最好的选择可能是为了提高可读性。
$"Today I saw a {animal1} and a {animal2}"
是的,我也在第二个动物之前添加了a
:)虽然我不处理“ an”的情况。
如果您希望所有附加内容都不再那么冗长,也可以选择使用AppendFormat
...
stringBuilder.AppendFormat("Today I saw a {0} and a {1}", animal1, animal2);
答案 1 :(得分:1)
串联这样的字符串会为新字符串分配内存,只是将其附加到您的StringBuilder
上,这很浪费。如前所述,您应该明确地Append
来代替它们。