11 July 2007 .NET oliver.guhr

Ich habe gerade mit dem Code aus Roberts Vergleichstest noch etwas gespielt.

Test 1 Als erstes habe ich die Anzahl der Durchläufe auf 1000 erhöht.

  1. String mit += 3,2012 ms bis 7,9336 ms

  2. String mit StringBuilder 0,0595 ms bis 0,0603 ms

Test 2 Weil man aber meistens nicht nur einen String verbindet, sondern mehrere habe ich den Code angepasst:

returnString += “noch” + “ein” + “Test”; vs. returnString.Append(“noch”+”ein”+”test”);

  1. String mit += 33,3514 ms bis 28,0035 ms 2. String mit StringBuilder 0,0835 ms bis 0,1801 ms Das heisst das sich bei “+=” die Zeiten verzehnfacht (!) haben wärend sie sich die Zeiten bei dem StringBuilder nur verdoppelt haben.

Test 3 Manchmal sieht man auch diese Variante um den Code übersichtlich zu halten:

returnString += “noch”; returnString += “ein”; returnString += “Test”;

vs.

returnString.Append(“noch”); returnString.Append(“ein”); returnString.Append(“test”);

  1. String mit += 174,3137 ms bis 36,2311 ms

  2. String mit StringBuilder 0,1625 ms bis 0,2123 ms

Diese Schreibweise += hat sich als echter Performance Killer erwiesen, die selbe Aufgabe benötigte nochmal ein vielfaches der Zeit.

Test 4 Also sollte ich jetzt immer den StringBuilder benutzen? Dazu habe ich einen Test mit nur einem Durchlauf, mit dem Code von Test 3, gemacht.

  1. String mit += 0,003 ms

  2. String mit StringBuilder 0,0036 ms bis 0,0053 ms

Bei diesem Test ergaben sich sogar Vorteile für die += Variante. Auch nach dem 5. Test blieb die Zeit 0,003 ms.

Fazit

Der StringBuilder bringt Performance Vorteile, wenn man viele Strings verknüpfen muss, bei wenigen aufrufen kann man getrost zur bequemeren += Variante griefen. Der Vorteil für den StringBuilder wurde bei dem Code von Test 3 ab 10 durchläufen deutlich. Für einfachste Aufgaben kann man die += Schreibweise nutzen, wenn’s aber aufwendiger wird ergeben sich deutliche Vorteile für den StringBuilder.