11 July 2007 .NET Robert Muehsig

Oft sieht man solchen Code:

String simplestring = “Hallo “; simplestring += “du “;

Dieser Code ist, zwar recht einfach zu verstehen, allerdings unperformanter als die “richtige” Variante. Lieber den StringBuilder mit der Append Methode benutzen: 

Meine Testapplikation

(Entschuldigung für die miese Formatierung - ich muss mich mal nach einem netten Plugin umschauen)

internal class Program {      static void Main(string[] args)      {      Console.WriteLine("String vs. StringBuilder");      Console.WriteLine();      Console.WriteLine("1. String mit +=");      StringAppend();      Console.WriteLine();      Console.WriteLine("2. String mit StringBuilder");      StringBuilderAppend();      Console.ReadLine();      }          public static void StringAppend()      {      Stopwatch sw = new Stopwatch();      sw.Start();      String returnString = "Test";      for (int i = 0; i < 100; i++)      {            returnString += "Test";       }       sw.Stop();       Console.WriteLine(sw.Elapsed.TotalMilliseconds.ToString());      }           public static void StringBuilderAppend()      {       Stopwatch sw = new Stopwatch();       sw.Start();       StringBuilder returnString = new StringBuilder("Test");       for (int i = 0; i < 100; i++)       {             returnString.Append("Test");        }       sw.Stop();      Console.WriteLine(sw.Elapsed.TotalMilliseconds.ToString());      } }
Ergebnisse: PC Konfiguration: - Windows Vista - Visual Studio 2005 - Centrino 2Ghz - 1GB Arbeitsspeicher 1. Durchlauf: String Verknüpfung durch "+=": 0,7654 Millisekunden String Verknüpfung mit dem StringBuilder: 0,0371 Millisekunden 2. Durchlauf: String Verknüpfung durch "+=": 1,3686 Millisekunden String Verknüpfung mit dem StringBuilder: 0,0609 Millisekunden

3. Durchlauf: String Verknüpfung durch “+=”: 0,7886M illisekunden String Verknüpfung mit dem StringBuilder: 0,0259 Millisekunden

Fazit: Der StringBuilder ist hier (trotz der Schwankungen) doch wesentlich schneller. Man könnte den Code noch weiter Optimieren, da man dem StringBuilder im Konstruktor noch einen Integer übergeben kann, damit bereits mehr Speicher reserviert wird.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!