Kolumne: C# im Fokus

Zeichenketten mit char String und StringBuilder (Teil 2)
Kommentare

Die Klasse StringBuilder
Für die Verwaltung von einfachen und konstanten Zeichenketten eignet sich die Klasse String optimal, schließlich wurde sie dafür entworfen. Müssen jedoch viele Zeichenkettenoperationen

Die Klasse StringBuilder

Für die Verwaltung von einfachen und konstanten Zeichenketten eignet sich die Klasse String optimal, schließlich wurde sie dafür entworfen. Müssen jedoch viele Zeichenkettenoperationen durchgeführt werden oder die Zeichenketten sind sehr umfangreich, eignet sich eher der Einsatz der StringBuilder-Klasse [2]. Da die String-Klasse bei jeder Zeichenkettenmanipulation eine neue Zeichenkette im Speicher anlegt, führt das zu vielen Speicheroperationen. Die StringBuilder-Klasse hingegen ermöglicht die Manipulation des Textinhalts, ohne dass jedes Mal eine neue Zeichenkette erstellt wird. Das führt zu einer besseren Performance. Listing 4 zeigt dazu ein Beispiel.

Listing 4

private static void Example6()
{
    string strA = string.Empty;
    Stopwatch sw = new Stopwatch();
    sw.Start();
    for (int i = 0; i < 40000; i++) 
        strA = String.Concat(strA, "*");
    sw.Stop();
    Console.WriteLine("[STRING] Zeit: {0}", sw.ElapsedMilliseconds);
    
    sw.Reset();
    StringBuilder sb = new StringBuilder();
    sw.Start();
    for (int i = 0; i < 40000; i++) 
        sb.Append("*");
    sw.Stop();
    Console.WriteLine("[STRINGBUILDER] Zeit (ms): {0}", sw.ElapsedMilliseconds);
}  

Innerhalb einer Schleife werden 40 000 Zeichenkettenoperationen durchgeführt. Die erste Variante verwendet die String-Klasse und benötigt etwa 621 Millisekunden, um alle Operationen auszuführen. Die zweite Variante verwendet die StringBuilder-Klasse und benötigt lediglich zirka zwei Millisekunden für alle Operationen. Insgesamt besitzt die StringBuilder-Klasse die folgenden fünf Methoden, um Zeichenketten zu modifizieren:

  • Append
  • AppendFormat
  • Insert
  • Remove
  • Replace

Die Verwendung der Methoden ist fast identisch mit den namensgleichen Methoden der String-Klasse. Wie allerdings deutlich wird, besitzt die StringBuilder-Klasse weitaus weniger Methoden. Das ist in Ordnung, da das primäre Einsatzfeld der Klasse darin besteht, einen textuellen Inhalt aufzubereiten. Um die gespeicherte beziehungsweise aufbereitete Zeichenkette aus einer StringBuilder-Instanz auslesen zu können, muss lediglich die ToString()-Methode aufgerufen werden.

Zusammenfassung

Zeichenketten oder einzelne Zeichen können mit den Datentypen char, String und StringBuilder gut verarbeitet werden. Die String-Klasse wird dabei wahrscheinlich am häufigsten eingesetzt. Sie eignet sich immer gut, wenn die Zeichenkette konstant beziehungsweise nur wenige Male geändert wird. Steigt die Anzahl der Zeichenkettenoperationen, stellt jedoch die Verwendung der StringBuilder-Klasse die bessere Variante dar. Eine der folgenden C#-Kolumnen widmet sich dann dem Thema Encoding.

Marc André Zhou ist als freiberuflicher .NET-Technologieberater tätig. Seine Schwerpunkte sind die .NET-Entwicklung, SharePoint, Softwarearchitekturen und Frameworks. Sie erreichen ihn unter zhou@dev-sky.net.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -