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 Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de