【发布时间】:2015-12-23 03:04:48
【问题描述】:
将一个字符串附加到另一个字符串在性能上的效率更高?
使用StringBuilder.Insert 方法还是string.Concat 方法?
messageString.Insert(0, prependedString);
或
string.Concat(prependedString, messageString);
在我的情况下,消息字符串比较大,前置字符串很短。
【问题讨论】:
-
如果您要连接两个以上的字符串,请使用
StringBuilder。 -
@M.kazemAkhgary 这不是真的。事实上,正是出于这个原因,首选 StringBuilder - 连接字符串会强制分配多个临时字符串,而 StringBuilder 仅操作单个缓冲区。这些临时字符串会一直保留到 GC 收集它们,这也会导致 CPU 浪费。随着时间的推移,这些分配可能会导致性能问题
-
@ChristophBrückmann 有很多关于此事的文章。连接两个字符串创建第三个。连接三个,创建第四个。它们中的每一个都需要分配一个缓冲区,该缓冲区会一直保留在内存中,直到垃圾收集器运行为止。事实上,太多的临时字符串会强制进行垃圾收集。这在桌面应用程序中很烦人,但在繁忙的服务器或 Web 应用程序中可能非常糟糕 - 僵尸的数量加起来,服务器必须停止处理并等待 GC 收集它们
-
@M.kazemAkhgary 为什么会有人继续在循环中实例化一个新的字符串生成器?
-
即使启用了后台垃圾回收,CPU 时间也是 CPU 时间 - 即使它在另一个内核中运行,它仍然从处理中窃取周期。
标签: c# .net string stringbuilder