Was hat es eigentlich mit String.Empty auf sich?
Mittwoch 2. März 2011 von tommi
Hin und wieder stösst man im Code auf String.Empty das gern statt “” genutzt wird. Auf Nachfrage teilte mir einer meiner Kollegen mit :
”Besser immer String.Empty benutzen – dies ist Performanter und String.Empty kann Betriebssystemspezifisch vom Compiler auf einen leeren String gesetzt werden”
Da dachte ich mir: Klingt komisch – isses auch.
Soviel zur Vorgeschichte. Nun zu den Ergebnissen meiner Nachforschungen und Experimente.
In dem statischen Konstruktor der String Klasse wird der Empty Wert auch nur auf “” gesetzt. Also nix besonderes.
1 static String() 2 { 3 Empty = ""; 4 }
Das bedeutet somit das String.Empty erst zur Laufzeit vom Framework gesetzt wird. Das hat wiederum Konsequenzen für die Verwendung in einem Switch da dieser nur auf Konstante Werte auswerten kann:
Hier kommt man also nicht drum herum “” zu verwenden.
Jetzt könnte man ja meinen: Ok statt dem Switch kann ich auch das IF Statement verwenden – da kann ich dann schön String.Empty einsetzen. Klar, kann man machen. IF Statements können aber im Gegensatz zu Switch einen deutlichen Performaceverlust führen denn komplexte Switches werden intern als Dictionary implementiert die je nach Situation sehr viel Performanter sein können als IF Conditions.
Aber gibt es im Allgemeinen einen Geschwindigkeitsunterschied? Dazu ein kleines Experiment
1 Stopwatch stopWatch = new Stopwatch(); 2 stopWatch.Start(); 3 for (long i = 0; i < 3000000000; i++) 4 { 5 //Dauer: 6076 6 //if ("" == null) { throw new System.Exception(); } 7 8 //Dauer: 8150 - langsamer 9 if (string.Empty == null) { throw new System.Exception(); } 10 } 11 stopWatch.Stop(); 12 Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString() ); 13 Console.ReadLine();
Wie die folgende Analyse zeigt, kann der Compiler den Vergleich mit “” komplett entfernen.
Also unter dem Strich lasse ich mich zu der Aussage verleiten das String.Empty in weniger Fällen nutzbar (Switch) und auch langsamer ist als das String Literal “”.
Dieser Beitrag wurde erstellt am Mittwoch 2. März 2011 um 16:44 und abgelegt unter Allgemein. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.
