我是否应该在C#中使用StringBuilder,如果我有大量的连接,即使总长度很小?

时间:2014-04-12 18:09:48

标签: c# stringbuilder

我正在审查一些代码,我看到了大量的字符串连接,但它们都是非常小的字符串。像这样:

public string BuildList()
{
    return "A" + GetCount() + "B" + TotalCount() + "C" + AMountLeft()
         + "D" + DaysLeft + "R" +  Initials() + "E";
}

我正在简化它,但总的来说,最长的字符串大约是300个字符,而+的数量大约是20.我试图弄清楚它是否值得将它转换为StringBuilder并做类似这样的事情:

public string BuildList()
{
    var sb = new StringBuilder();
    sb.Append("A");
    sb.Append(GetCount());
    sb.Append("B");
    sb.Append(TotalCount());
    sb.Append("C");
    sb.Append(AmountLeft());
    sb.Append("D");

    // etc . . 
}

我无法看到与测试有很大差异,但想知道是否有关于使用StringBuilder(字符串长度或不同连接数)的良好盈亏平衡规则?

2 个答案:

答案 0 :(得分:5)

对于具有有限数量的变量字符串的这种固定情况,并且在这些值之间具有始终相同的文本部分,我个人会在那里使用字符串格式。这样,你的意图就会变得更清晰,而且更容易看到发生了什么:

return string.Format("A{0}B{1}C{2}D{3}R{4}E",
    GetCount(), TotalCount(), AmountLeft(), DaysLeft(), Initials());

请注意,string.Formatslightly slower而非string.Concat(正如其他人所说,当您使用+构建字符串时使用)。但是,字符串连接不太可能成为您应用程序中的瓶颈,因此您应该倾向于明确微优化,直到这成为实际问题。

答案 1 :(得分:4)

不,在这种情况下,没有理由支持StringBuilder字符串连接。

您的第一个代码将成为String.Concat的一次调用,使用StringBuilder会稍微提高效率。