字符串拼接用“+”还是 StringBuilder?别再凭感觉写了

字符串拼接用“+”还是 StringBuilder?别再凭感觉写了

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

在C#中,字符串拼接可以使用“+”或StringBuilder,具体取决于场景。少量拼接时使用“+”更简洁,而在循环中则应使用StringBuilder以提高性能。特殊情况下可使用string.Concat或string.Join。选择合适的拼接方式能显著提升代码性能。

🎯

关键要点

  • 在C#中,字符串拼接可以使用“+”或StringBuilder,具体取决于场景。
  • 少量拼接时使用“+”更简洁,编译器会优化。
  • 大量、循环内的拼接应使用StringBuilder以提高性能。
  • 特殊情况下可使用string.Concat或string.Join。
  • C#字符串是不可变的,拼接时会创建新对象,影响性能。
  • 编译期确定的拼接会被优化为单一字符串,运行时无拼接开销。
  • 循环内拼接会导致多次内存分配和拷贝,性能低下。
  • StringBuilder通过维护可变字符数组,减少内存分配次数,提高性能。
  • 在拼接集合时,使用string.Join更高效。
  • 字符串插值适合格式化场景,但频繁使用时需注意性能开销。
  • 最佳实践:少量用“+”,循环用StringBuilder,集合用Join,格式化用插值或string.Format。
  • 如果能预估最终长度,给StringBuilder预设容量以减少扩容。
  • 在少量固定次数拼接时,“+”可能比StringBuilder更优。
  • 字符串拼接看似简单,但用错会影响程序性能。

延伸问答

在C#中,字符串拼接时使用“+”和StringBuilder有什么区别?

使用“+”适合少量拼接,编译器会优化;而在循环中拼接时应使用StringBuilder以提高性能。

为什么在循环中使用“+”拼接会影响性能?

因为每次拼接都会创建新的字符串对象,导致多次内存分配和拷贝,性能低下。

如何提高StringBuilder的性能?

可以预设StringBuilder的容量,以减少扩容次数,从而提高性能。

在什么情况下使用string.Join进行字符串拼接?

在拼接集合时,使用string.Join更高效,因为它内部也使用了StringBuilder。

字符串插值在性能上有什么注意事项?

字符串插值适合格式化场景,但频繁使用时需注意性能开销。

在C#中,如何选择合适的字符串拼接方式?

少量拼接用“+”,循环拼接用StringBuilder,集合用string.Join,格式化用插值或string.Format。

➡️

继续阅读