Constructing big strings (e.g. for SQL commands) how smart is the C# compiler?

c#, string-concatenation

Solution

Yes the compiler is smart enough to optimize constant string concatenations. To prove this let's examine the following method:

public static string Concat()
{
    return "a" + "b";
}

Compiled in Release mode this produces the following IL:

.method public hidebysig static string Concat() cil managed
{
    .maxstack 8
    L_0000: ldstr "ab"
    L_0005: ret 
}

Notice the optimization. So in terms of performance both methods are identical. The only difference is that in the second case you will get new lines (\r\n) in the string, so they won't produce the exactly same string but SQL Server is also smart enough :-)

Problem

This may sound stupid but... When I create big SQL commands I want to keep my code readable and I do this: ``` cmd.CommandText = "SELECT top 10 UserID, UserName " + "FROM Users " + "INNER JOIN SomeOtherTable ON xxxxx " + "WHERE UserID IN (blablabla)"; ``` See the concatenations? Now, to save performance I now do this: ``` cmd.CommandText = @"SELECT top 10 UserID, UserName FROM Users INNER JOIN SomeOtherTable ON xxxxx WHERE UserID IN (blablabla)"; ``` It keeps the code readable but saves concatenations. Now does it really save any performance or the compiler is smart enough to "pre-concatenate" the first string?

Original source