【发布时间】:2012-02-25 19:24:03
【问题描述】:
可能重复:
Why is String.Concat not optimized to StringBuilder.Append?
有一天,我向我的一个朋友抱怨一个特定的 Telerik 控件。我告诉他生成控件树需要几秒钟,在分析后我发现它在循环中使用字符串连接而不是 StringBuilder。重写后它几乎立即生效。
所以我的朋友听说了,似乎很惊讶 C# 编译器没有像 Java 编译器那样自动进行转换。阅读了许多 Eric Lippert 的答案,我意识到这个功能没有成功,因为它被认为不够有价值。但是,如果假设实施它的成本很小,那么有什么理由会阻止人们这样做呢?
【问题讨论】:
-
技术上没有什么可以阻止您执行此优化,但请考虑这两个操作在语义上并不等效。连接
string会返回一个新的string对象,它是操作的结果,而使用StringBuilder将修改现有的字符串对象。必须执行代码分析以确保您不会以任何方式依赖串联的副作用。在大多数情况下,这并不是一个无法克服的问题,但话说回来,一开始就正确编写代码并不是那么难。 -
也看看这个帖子:pranayamr.blogspot.com/2011/02/…
标签: c# string stringbuilder compiler-optimization