.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
如果您对字符串进行多次(我想大概超过10次)“修改”,则速度会快得多,但它会带来一些额外的开销,因为它会在缓冲区中分配比您需要的更多的空间,并在需要时调整其内部缓冲区的大小StringBuilder
String.Format
,原因有二:
- 维护格式字符串比重新排列一堆变量容易得多
接受一个String.Format
,它被传递给嵌入字符串中的任何IFormatProvider
类型(例如数字),这样您就可以为指定的区域性获得适当的数字格式,并对值的格式进行更多的控制IFormattable
StringBuilder
或String.Format
指定CultureInfo.InvariantCulture
还有两件事需要注意
还具有一个StringBuilder
功能,该功能为您提供了AppendFormat
的灵活性,而不需要不必要的第二个缓冲区String.Format
- 当使用
时,请确保通过将传递给StringBuilder
的参数串联在一起,不会使目的失效。这很容易错过Append
city + ", " + state;
StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();