C#是否优化了字符串文字的连接?

例如,编译器是否知道翻译

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

string s = "test this function";

从而避免字符串连接的性能问题?


是。 这由C#规范保证。 它在7.18节(C#3.0规范)中:

只要表达式符合上述要求,表达式就会在编译时进行评估。 即使表达式是包含非常量结构的较大表达式的子表达式,情况也是如此。

(“上面列出的要求”包括应用于两个常量表达式的+运算符。)

另请参阅此问题。


只是关于相关主题的一个附注 - C#编译器还将使用' + '运算符'优化'涉及非文字的多个连接,以对String.Concat()方法的多参数重载进行单个调用。

所以

string result = x + y + z;

编译成相当于的东西

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

而不是更天真的可能性:

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

没有什么惊天动地的,但只是想把这一点加入关于字符串文字串联优化的讨论中。 我不知道这种行为是否由语言标准来规定。


是。

C#不仅优化了字符串文字的连接,还将等价的字符串文字折叠为常量,并使用指针引用对同一常量的所有引用。

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

上一篇: Does C# optimize the concatenation of string literals?

下一篇: Error while inserting record whose primary key set by AFTER INSERT trigger