Does C# optimize the concatenation of string literals?

For instance, does the compiler know to translate

string s = "test " + "this " + "function";

to

string s = "test this function";

and thus avoid the performance hit with the string concatenation?


Yes. This is guaranteed by the C# specification. It's in section 7.18 (of the C# 3.0 spec):

Whenever an expression fulfills the requirements listed above, the expression is evaluated at compile-time. This is true even if the expression is a sub-expression of a larger expression that contains non-constant constructs.

(The "requirements listed above" include the + operator applied to two constant expressions.)

See also this question.


Just a side note on a related subject - the C# compiler will also 'optimize' multiple concatenations involving non-literals using the ' + ' operator to a single call to a multi-parameter overload of the String.Concat() method.

So

string result = x + y + z;

compiles to something equivalent to

string result = String.Concat( x, y, z);

rather than the more naive possibility:

string result = String.Concat( String.Concat( x, y), z);

Nothing earth-shattering, but just wanted to add this bit to the discussion about string literal concatenation optimization. I don't know whether this behavior is mandated by the language standard or not.


Yes.

C# not only optimizes the concatenation of string literals, it also collapses equivalent string literals into constants and uses pointers to reference all references to the same constant.

链接地址: http://www.djcxy.com/p/60292.html

上一篇: JPA + eclipseLink2.0失败

下一篇: C#是否优化了字符串文字的连接?