up vote 2 down vote favorite
1

Possible Duplicates:
Is String.Format as efficient as StringBuilder
C# String output: format or concat?

What is the performance priority and what should be the conditions to prefer each of the following:

String.Format("{0}, {1}", city, state);

or

city + ", " + state;

or

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
link|flag

2  
@Shimmy: Look at this stackoverflow.com/questions/6785/… – shahkalpesh May 28 '09 at 3:31
thanks and sorry – Shimmy Jul 7 '09 at 18:26

closed as exact duplicate by shahkalpesh, tvanfosson, Crescent Fresh, Daniel Schaffer, Blair Conrad May 28 '09 at 4:04

This question covers exactly the same ground as earlier questions on this topic; its answers may be merged with another identical question.

4 Answers

up vote 4 down vote
  • Compiler will optimize as much string concat as it can, so for example strings that are just broken up for line break purposes can usually be optimized into a single string literal.
  • Concatenation with variables will get compiled into String.Concat
  • StringBuilder can be a lot faster if you're doing several (more than 10 or so I guess) "modifications" to a string but it carries some extra overhead because it allocates more space than you need in its buffer and resizes its internal buffer when it needs to.

I personally use String.Format almost all of the time for two reasons:

  • It's a lot easier to maintain the format string than rearranging a bunch of variables.
  • String.Format takes a IFormatProvider which is passed to any IFormattable types embedded in the string (such as numerics) so that you get appropriate numeric formatting for the specified culture and overall just more control over how values are formatted.

For example, since some cultures use a comma as a decimal point you would want to ensure with either StringBuilder or String.Format that you specify CultureInfo.InvariantCulture if you wanted to ensure that numbers were formatted the way you intend.

Two more thing to note...

  • StringBuilder also has an AppendFormat function which gives you the flexibility of String.Format without requiring an unnecessary second buffer.
  • When using StringBuilder, make sure you don't defeat the purpose by concatenating parameters that you pass to Append. It's an easy one to miss.
link|flag
up vote 2 down vote

Good reading on the subject... whether you agree with him or not:

http://www.codinghorror.com/blog/archives/001218.html

link|flag
up vote 2 down vote accepted

Performance Quiz / String concatenation types

link|flag
up vote 0 down vote

There is no relevant diference. But assuming that String.Format internally uses a StringBuilder (you can see that with the Reflector tool), using directly StringBuilder.Append should be faster.

EDIT: Of course that use "+" operator is the worst option since it creates a new string instance for each string that you are concatenating.

link|flag
wrong, according to the link i posted bellow it seems than + is the best way – Shimmy May 28 '09 at 4:18

Not the answer you're looking for? Browse other questions tagged or ask your own question.