Posts
289
Comments
88
Trackbacks
4
Performance Vorteile bei der Verwendung von StringBuilder

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

posted on Saturday, September 06, 2008 4:18 PM Print
Comments
Gravatar
# re: Performance Vorteile bei der Verwendung von StringBuilder
dna
11/17/2008 4:52 PM
NICE CODE

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 1 and 4 and type the answer here: