Concatenating Strings Efficiently
Rules Of Thumb
So, when should you use StringBuilder
, and when should you use the string concatenation operators?
- Definitely use
StringBuilder
when you're concatenating in a non-trivial loop - especially if you don't know for sure (at compile time) how many iterations you'll make through the loop. For example, reading a file a character at a time, building up a string as you go using the+=
operator is potentially performance suicide. - Definitely use the concatenation operator when you can (readably) specify everything which needs to be concatenated in one statement. (If you have an array of things to concatenate, consider calling
String.Concat
explicitly - orString.Join
if you need a delimiter.) - Don't be afraid to break literals up into several concatenated bits - the result will be the same. You can aid readability by breaking a long literal into several lines, for instance, with no harm to performance.
- If you need the intermediate results of the concatenation for something other than feeding the next iteration of concatenation,
StringBuilder
isn't going to help you. For instance, if you build up a full name from a first name and a last name, and then add a third piece of information (the nickname, maybe) to the end, you'll only benefit from usingStringBuilder
if you don't need the (first name + last name) string for other purpose (as we do in the example which creates aPerson
object). - If you just have a few concatenations to do, and you really want to do them in separate statements, it doesn't really matter which way you go. Which way is more efficient will depend on the number of concatenations the sizes of string involved, and what order they're concatenated in. If you really believe that piece of code to be a performance bottleneck, profile or benchmark it both ways.