String Concat using constants - performance

末鹿安然 提交于 2019-12-10 14:46:36

问题


Assume I have the following string constants:

const string constString1 = "Const String 1";
const string constString2 = "Const String 2";
const string constString3 = "Const String 3";
const string constString4 = "Const String 4";

Now I can append the strings in two ways: Option1:

string resultString = constString1 + constString2 + constString3 + constString4;

Option2:

string resultString = string.Format("{0}{1}{2}{3}",constString1,constString2,constString3,constString4);

Internally string.Format uses StringBuilder.AppendFormat. Now given the fact that I am appending constant strings, which of the options (option1 or option 2) is better with respect to performance and/or memory?


回答1:


The first one will be done by the compiler (at least the Microsoft C# Compiler) (in the same way that the compiler does 1+2), the second one must be done at runtime. So clearly the first one is faster.

As an added benefit, in the first one the string is internalized, in the second one it isn't.

And String.Format is quite slow :-) (read this http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/formatting-strings.aspx). NOT "slow enough to be a problem", UNLESS all your program do all the day is format strings (MILLIONS of them, not TENS). Then you could probably to it faster Appending them to a StringBuilder.




回答2:


The first variant will be best, but only when you are using constant strings.

There are two compilator optimizations (from the C# compiler, not the JIT compiler) that are in effect here. Lets take one example of a program

const string A = "Hello ";
const string B = "World";

...
string test = A + B;

First optimization is constant propagation that will change your code basically into this:

string test = "Hello " + "World";

Then a concatenation of literal strings (as they are now, due to the first optimization) optimization will kick in and change it to

string test = "Hello World";

So if you write any variants of the program shown above, the actual IL will be the same (or at least very similar) due to the optimizations done by the C# compiler.



来源:https://stackoverflow.com/questions/5164436/string-concat-using-constants-performance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!