I know you should use a StringBuilder when concatenating strings but I was just wondering if there is a difference in concatenating string variables and string literals. So, is there a difference in performance in building s1, s2, and s3?
string foo = "foo";
string bar = "bar";
string s1 = "foo" + "bar";
string s2 = foo + "bar";
string s3 = foo + bar;
In the case you present, it’s actually better to use the concatenation operator on the string class. This is because it can pre-compute the lengths of the strings and allocate the buffer once and do a fast copy of the memory into the new string buffer.
And this is the general rule for concatenating strings. When you have a set number of items that you want to concatenate together (be it 2, or 2000, etc) it’s better to just concatenate them all with the concatenation operator like so:
It should be noted in your specific case for s1:
The compiler sees that it can optimize the concatenation of string literals here and transforms the above into this:
Note, this is only for the concatenation of two string literals together. So if you were to do this:
Then it does nothing special (but it still makes a call to Concat and precomputes the length). However, in this case:
The compiler will translate that into:
If the number of strings that you are concatenating is variable (as in, a loop which you don’t know beforehand how many elements there are in it), then the StringBuilder is the most efficient way of concatenating those strings, as you will always have to reallcate the buffer to account for the new string entries being added (of which you don’t know how many are left).