可能的重复:
String.Format 与 StringBuilder 一样高效吗
C# 字符串输出:格式还是连接?

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

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

或者

city + ", " + state;

或者

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
有帮助吗?

解决方案

  • 编译器将尽可能多地优化字符串连接,因此,例如,出于换行目的而分解的字符串通常可以优化为单个字符串文字。
  • 与变量的连接将被编译为 String.Concat
  • 如果您对字符串进行多次(我猜超过 10 次左右)“修改”,StringBuilder 可能会快得多,但它会带来一些额外的开销,因为它会在缓冲区中分配比您需要的更多的空间,并在以下情况下调整其内部缓冲区的大小:它需要。

我个人几乎所有时间都使用 String.Format 有两个原因:

  • 维护格式字符串比重新排列一堆变量要容易得多。
  • String.Format 采用 IFormatProvider,该 IFormatProvider 会传递给嵌入字符串中的任何 IFormattable 类型(例如数字),以便您获得适合指定区域性的数字格式,并且总体上可以更好地控制值的格式设置。

例如,由于某些区域性使用逗号作为小数点,如果您想确保数字按照您想要的方式格式化,您需要确保使用 StringBuilder 或 String.Format 指定 CultureInfo.InvariantCulture。

还有两点需要注意...

  • StringBuilder 还有一个 AppendFormat 函数,它为您提供了 String.Format 的灵活性,而不需要不必要的第二个缓冲区。
  • 使用 StringBuilder 时,请确保不会通过连接传递给 Append 的参数来达到目的。这是一个很容易错过的地方。

其他提示

有没有相关性差异。但假设的String.Format内部使用一个StringBuilder(你可以看到,与反射器工具),使用直接StringBuilder.Append应更快。

编辑:当然是用“+”操作符是最糟糕的选择,因为它会为你拼接每个字符串的新字符串实例

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top