String.Format vs "string" + "string" or StringBuilder?
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.
- 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 aIFormatProvider
which is passed to anyIFormattable
types embedded in the string (such as numeric) 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 anAppendFormat
function which gives you the flexibility ofString.Format
without requiring an unnecessary second buffer.- When using
StringBuilder
, make sure you don't defeat the purpose by concatenating parameters that you pass toAppend
. It's an easy one to miss.