Wenn man in einem Programm mehrere Strings miteinander verketten muss ist die Verwendung der Klasse StringBuilder anzuraten.
Der Performance Vorteil des StringBuilder-Objektes gegenüber einem String-Objektes liegt darin begründet, dass bei einem String-Verkettungsvorgang immer wieder neuer Speicher zugeordnet wird, während bei einem StringBuilder-Verkettungsvorgang nur Speicher zugeordnet wird, wenn der StringBuilder-Objektpuffer zu klein für die Aufnahme der neuen Daten ist.
Man kann daher die Performance des des StringBuilder-Objektes noch erhöhen, indem man dem Konstruktor die zu erwartende Puffergöße vorgibt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BSP
{
partial class StringVergleich
{
public static void TestStringbuilder()
{
DateTime dStart;
String sOutput = string.Empty;
String sAnhang = "GanzLaaaangeeeeerBeispieeeeelStriiiiiinng";
int iAnzahl = 200000;
// Test I - Test mit normaler Stringverkettung '+='
dStart = DateTime.Now;
for (int i = 0; i < iAnzahl; i++)
{
sOutput += sAnhang;
}
Console.WriteLine("Benötigte Zeit mit String-Operator '+=': " +
DateTime.Now.Subtract(dStart).TotalMilliseconds);
// Test II - Test mit Stringbuilder
dStart = DateTime.Now;
StringBuilder strB = new StringBuilder();
for (int i = 0; i < iAnzahl; i++)
{
strB.Append(sAnhang);
}
sOutput = strB.ToString();
Console.WriteLine("Benötigte Zeit mit StringBuilder I: " +
DateTime.Now.Subtract(dStart).TotalMilliseconds);
// Test III - Test mit Stringbuilder und vorgegebener Puffergröße
dStart = DateTime.Now;
StringBuilder strB2 = new StringBuilder(iAnzahl*sAnhang.Length);
for (int i = 0; i < iAnzahl; i++)
{
strB2.Append(sAnhang);
}
sOutput = strB2.ToString();
Console.WriteLine("Benötigte Zeit mit StringBuilder II: " +
DateTime.Now.Subtract(dStart).TotalMilliseconds);
}
}
}
Obiges Programm liefert folgendes Ergebnis:
Benötigte Zeit mit String-Operator '+=': 546,2304
Benötigte Zeit mit StringBuilder I: 30,0432
Benötigte Zeit mit StringBuilder II: 10,0144