我在这里维护此代码,该代码通常具有以下模式:

StringBuilder result = new StringBuilder();

result.Append("{=" + field.Name + "={");

当这样做时,似乎浪费了很多无用的对象,我想重写为:
result.Append("{=").Append(field.Name).Append("={");

第一个版本对GC施加更大压力是否正确?还是在C#编译器中使用字符串文字进行了一些优化,其中将字符串与字符串文字连接起来不会创建临时对象?

最佳答案

我同意所有答案,但是对我来说,您需要了解C#中的字符串,并且它们实际上是在“幕后”操纵的。

当连接5个或更多字符串时,将使用StringBuilder。这是因为编译器本质上会转换:

string a = b + c + d + e + f;

进入
r = String.Concat(new String[5] { a, b, c, d, e });

因此存在数组创建的隐式开销。

我建议阅读Eric Lippert的以下文章,他在C#中编写了字符串连接:

http://ericlippert.com/2013/06/17/string-concatenation-behind-the-scenes-part-one/
http://ericlippert.com/2013/06/24/string-concatenation-behind-the-scenes-part-two/

10-07 19:01
查看更多