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下一篇: C#是否优化了字符串文字的连接?