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

leo*_*ora 0 c# stringbuilder

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

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

我正在简化它,但总的来说,最长的字符串大约是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 . . 
}
Run Code Online (Sandbox Code Playgroud)

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

pok*_*oke 5

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

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

请注意,string.Format比稍微慢一点string.Concat(正如其他人所说的那样,在使用时构建字符串时使用+).但是,字符串连接不太可能成为应用程序中的瓶颈,因此您应该优先考虑微优化,直到成为实际问题.