Appending string in C#: String += vs string.Format vs StringBuilder
Appending strings performance test
String += creates new instance of object and saves it in memory, as a result you have 2 string objects in a memory. For this kind of targets .NET have class named StringBuilder which will work 2500 times faster than string += or trick with string.Format (which is a very bad idea). StringBuilder holds all data in one memory instance and changes it, not creates a new instance each time as it do += for string.
So better practice for appending strings is to use StringBuilder.
C# code:
int iterations = 100000;
string testString = string.Empty;
// string += test (using string.Concat will return the same result) Stopwatch sw = new Stopwatch(); sw.Start();
for (int i = 0; i < iterations; ++i) { testString += i.ToString(); }
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Reset();
// string.Format test testString = string.Empty; sw.Start();
for (int i = 0; i < iterations; ++i) { testString = string.Format("{0}{1}", testString, i.ToString()); }
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Reset();
// StringBuilder test StringBuilder sb = new StringBuilder(); sw.Start();
for (int i = 0; i < iterations; ++i) { sb.Append(i.ToString()); }
testString = sb.ToString();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadKey(); |
Results:
- string += appending : 176 654 ms
- string.Format appending : 456 265 ms
- StringBuilder.Append() : 68 ms