使用string.concat或字符串构建器更好吗?

时间:2016-09-12 09:14:56

标签: c# string

使用string.concat或字符串构建器更好吗?任何人都可以解释我应该在什么情况下使用这两个?

有一个问题here,它解释了性能,我想了解在哪里使用string.concat以及在哪里避免它?

提前致谢。

3 个答案:

答案 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并按长度总和初始化它的容量 - 它将节省一些时间来增加内部缓冲区的大小StringBuilderString.Concat没有这样做,正如您在Dmitry的评论中所看到的那样。