.net String.Format vs";“字符串”+&引用;“字符串”;还是StringBuilder?

.net String.Format vs";“字符串”+&引用;“字符串”;还是StringBuilder?,.net,performance,stringbuilder,string-concatenation,string.format,.net,Performance,Stringbuilder,String Concatenation,String.format,可能的重复项: 性能优先级是什么?选择以下各项的条件是什么: String.Format("{0}, {1}", city, state); 或 或 没有相关的差异。但是假设String.Format在内部使用StringBuilder(您可以通过Reflector工具看到),直接使用StringBuilder.Append应该更快 编辑:当然,使用“+”运算符是最糟糕的选项,因为它会为要连接的每个字符串创建一个新的字符串实例。 编译器将尽可能多地优化字符串concat,因此,例如,为了换

可能的重复项:

性能优先级是什么?选择以下各项的条件是什么:

String.Format("{0}, {1}", city, state);


没有相关的差异。但是假设String.Format在内部使用StringBuilder(您可以通过Reflector工具看到),直接使用StringBuilder.Append应该更快

编辑:当然,使用“+”运算符是最糟糕的选项,因为它会为要连接的每个字符串创建一个新的字符串实例。

  • 编译器将尽可能多地优化字符串
    concat
    ,因此,例如,为了换行而拆分的字符串通常可以优化为单个字符串文本
  • 与变量的串联将被编译成
    String.Concat
  • StringBuilder
    如果您对字符串进行多次(我想大概超过10次)“修改”,则速度会快得多,但它会带来一些额外的开销,因为它会在缓冲区中分配比您需要的更多的空间,并在需要时调整其内部缓冲区的大小
我个人几乎总是使用
String.Format
,原因有二:

  • 维护格式字符串比重新排列一堆变量容易得多
  • String.Format
    接受一个
    IFormatProvider
    ,它被传递给嵌入字符串中的任何
    IFormattable
    类型(例如数字),这样您就可以为指定的区域性获得适当的数字格式,并对值的格式进行更多的控制
例如,由于某些区域性使用逗号作为小数点,如果要确保数字的格式符合您的要求,则需要使用
StringBuilder
String.Format
指定
CultureInfo.InvariantCulture

还有两件事需要注意

  • StringBuilder
    还具有一个
    AppendFormat
    功能,该功能为您提供了
    String.Format
    的灵活性,而不需要不必要的第二个缓冲区
  • 当使用
    StringBuilder
    时,请确保通过将传递给
    Append
    的参数串联在一起,不会使目的失效。这很容易错过

@Shimmy:看看这篇@freegorer杰夫·阿特伍德的文章,这篇文章真是太棒了!谢谢,根据我在下面发布的链接,看起来比+是最好的way@shimmy,该链接中没有StringBuilder。另外,在该测试中,您只连接了3个字符串,字符串的数量对性能影响很大。编辑错误。C#编译器将把字符串或对象组合成一个数组,然后调用String.Concat()。我希望String.Concat(String[])是最有效的,因为实现可以将字符串分配到正确的长度。
city + ", " + state;
StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();