使用string.concat或字符串构建器更好吗?任何人都可以解释我应该在什么情况下使用这两个?
有一个问题here,它解释了性能,我想了解在哪里使用string.concat以及在哪里避免它?
提前致谢。
答案 0 :(得分:5)
从参考源
中可以看到http://referencesource.microsoft.com/#mscorlib/system/string.cs,206408f6325aea24
[ComVisible(false)]
public static String Concat(IEnumerable<String> values) {
if (values == null)
throw new ArgumentNullException("values");
Contract.Ensures(Contract.Result<String>() != null);
Contract.EndContractBlock();
StringBuilder result = StringBuilderCache.Acquire();
using(IEnumerator<String> en = values.GetEnumerator()) {
while (en.MoveNext()) {
if (en.Current != null) {
result.Append(en.Current);
}
}
}
return StringBuilderCache.GetStringAndRelease(result);
}
String.Concat
使用StringBuilder
这就是为什么两种方法大致相同的 。
答案 1 :(得分:3)
string.Concat
使用StringBuilder
来完成其工作。因此,如果你有一个连接多个字符串的操作我更喜欢string.Concat
,因为语法较短。
var result = string.Concat("abc", "def");
如果必须执行多个操作,则应使用单个StringBuilder
实例,以提高性能(因为多次string.Concat
调用将每次实例化自己的StringBuilder
。
var builder = new StringBuilder();
for (int i = 0; i < numberOfOperations; i++)
{
builder.Append(getStringResult());
}
答案 2 :(得分:1)
此外,如果您有一个已知大小的字符串集合,您可以使用StringBuilder
并按长度总和初始化它的容量 - 它将节省一些时间来增加内部缓冲区的大小StringBuilder
。 String.Concat
没有这样做,正如您在Dmitry的评论中所看到的那样。