【问题标题】:Use the += operator to concat strings [duplicate]使用 += 运算符连接字符串 [重复]
【发布时间】:2012-11-11 20:45:09
【问题描述】:

可能重复:
String vs StringBuilder

为什么我不应该使用+= 来连接字符串?

最快的选择是什么?

【问题讨论】:

标签: c# .net string concatenation string-concatenation


【解决方案1】:

字符串在 .NET 中是不可变的。这意味着它们一旦存在就无法更改。

StringBuilder 旨在缓解此问题,允许您附加到 n 大小的预定字符数组(我认为默认为 16?!)。但是,一旦StringBuilder 超过了指定的限制.. 它需要分配一个更大的自身副本,并将内容复制到其中.. 从而产生可能更大的问题。

这归结为过早的优化。除非您注意到字符串连接使用过多内存的问题。担心它是没有用的。

【讨论】:

  • 实际上,"Hello " + "World!" 正好是 1 个字符串。编译器自己进行 concat。
  • ..sigh.. 我需要喝杯咖啡。谢谢 :) 编辑:我真的不明白我为什么要写那个。我知道..不知何故忘记了。我昨天做了同样的事情..可能是时候再次通过 C# 清除 CLR 了.. :/
【解决方案2】:

+= 和 String1 = String1+String2 做同样的事情,将整个字符串复制到一个新的。

如果您在循环中执行此操作,则会生成大量内存分配,从而导致性能不佳。

如果您想构建 long 字符串,您应该查看针对此类操作进行了优化的 StringBuilder Class

简而言之:一些 concat 字符串不会对性能造成太大影响,但是通过在循环中添加小位来构建 large 字符串会大大降低您的速度和/或会占用大量内存.

另一篇关于字符串性能的有趣文章:http://www.codeproject.com/Articles/3377/Strings-UNDOCUMENTED

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2017-07-24
    • 2021-12-10
    • 2012-05-07
    • 2023-03-21
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多