C#: String.Empty vs. ""

Man lernt ja bekanntlich nie aus. So entdeckte ich letztens, dass es zum Anlegen von leeren Strings in C# eine Alternative zu "" gibt – nämlich String.Empty. Die Frage, die sich bei solchen Entdeckungen immer stellt, ist natürlich:

Bringt das Anlegen von leeren Strings mit String.Empty irgendwelche Performance-Vorteile gegenüber den monopolartig verbreiteten Doppel-Gänsefüßchen?

Dafür basteln wir uns einfach wieder eine simple Test-Konsolenanwendung:


static void Main(string[] args)
{
  const int NUM_LOOPS = 500000000;
  
  bool cancel = false;
  while (!cancel)
  {
    Console.Clear();
    
    Console.WriteLine("Version1: string str = \"\"");
    DateTime version1Start = DateTime.Now;
    for (int i = 0; i < NUM_LOOPS; i++)
    {
      string str = "";
    }
    
    TimeSpan version1Duration = DateTime.Now - version1Start;
    Console.WriteLine("Version 1 duration: " + version1Duration);
    
    Console.WriteLine();
    
    Console.WriteLine("Version2: string str = string.Empty;");
    DateTime version2Start = DateTime.Now;
    for (int j = 0; j < NUM_LOOPS; j++)
    {
      string str = string.Empty;
    }
    
    TimeSpan version2Duration = DateTime.Now - version2Start;
    Console.WriteLine("Version 2 duration: " + version2Duration);
    
    Console.WriteLine();
    
    TimeSpan difference = version2Duration - version1Duration;
    Console.WriteLine("Difference (Version 2 - Version 1): " +
      difference.TotalMilliseconds + "msec");
    
    Console.WriteLine();
    Console.Write("Press 'R' to retry, any other key to quit: ");
    if (Console.ReadKey().Key != ConsoleKey.R)
      cancel = true;
  }
  
  Console.WriteLine();
}

Führt man diese nun mehrmals aus kommt man zu folgendem Ergebnis:

String.Empty

Es gibt keinen eindeutigen Gewinner.

Mal ist string str = ""; schneller, mal string str = string.Empty;. Auch auf Multiprozessor- (oder Hyperthreading-)Systemen ergibt sich dabei kein Unterschied. Performancetechnisch ist es also egal, wie man einen Leerstring anlegt. Auch andere gravierende Gründe für den Einsatz von String.Empty scheinen nicht zu existieren (zumal "" quasi plattformunabhängig ist).

Fazit: Wie man seinen persönlichen Lieblings-Leerstring anlegt bleibt Geschmackssache.

1 Kommentar

  1. Ich hatte vor x Monaten mal wo gelesen, daß das String-Objekt Vorteile bei der Konkatenation gegenüber dem einfachen “string = string + x;” gibt. Vermutlich gibt es das String.empty() dann vor allem deswegen, weil ein String-Objekt die Methode einfach haben muss. *g*