Freigeben über


SYSK 196: Is there a performance hit and CPU spike when concatenating literal strings?

For example, is doing something like the code snippet below (done for readability) falls into the "bad practices" category?

string x = "<root>" +

           " <items>" +

           " <item>" +

           " <name>xyz</name>"

           " </item>" +

           " </items>" +

           "</root>";

 

The answer is – no!  The complier is smart enough to create one large string.

 

Of course, executing

            string x = "xyz " + myVar + " 123";

is a totally different story...  Do use string.Format or StringBuilder instead in such cases, e.g.

            string x = string.Format("xyz %1 123", myVar);

Comments

  • Anonymous
    September 12, 2006
    hmmm...i disagree, see http://channel9.msdn.com/ShowPost.aspx?PostID=216980 for metrics on why it shouldn't be considered a good practice -- there is a perf difference.
  • Anonymous
    September 12, 2006
    Actually the compiler takes the second statement and builds it as a string.Concat as well:

    string xyz = "xyz" + someVar + "zyx";

    gets converted by the compiler into:

    string xyz = string.Concat("xyz",someVar,"zyx");

    HOWEVER, multiple concats will cost you:

    string xyz = "xyz";
    xyz += someVar;
    xyz += "zyx";

    In the previous code, there are 2 string re-allocations, whereas all the other examples, only 1 string is allocated.
  • Anonymous
    September 24, 2006
    String.Format likes {0} more than %1.. Do you miss the good old C++ printf days..? I don't.. :)