Frage

  

Mögliche Duplikate:
   Ist String.Format so effizient wie String
   C # String Ausgabe: Format oder concat

Was ist die Leistung Priorität und was die Bedingungen sollte jede der folgenden bevorzugen:

String.Format("{0}, {1}", city, state);

oder

city + ", " + state;

oder

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
War es hilfreich?

Lösung

  • Compiler so viel String concat optimieren, wie es kann, so zum Beispiel Strings, die für Zeilenumbruch Zwecke in der Regel in einem einzigen String optimiert werden kann nur gebrochen werden wörtlich zu nehmen.
  • Verkettungs mit Variablen erhalten in String.Concat zusammengestellt
  • String kann viel schneller sein, wenn Sie mehrere tust (mehr als 10 oder so denke ich) „Änderungen“ in einen String, aber es trägt etwas mehr Aufwand, weil es mehr Platz zuweist, als Sie in seinem Puffer benötigen und passt die Größe seiner interne Puffer, wenn er muss.

Ich persönlich String.Format fast die ganze Zeit aus zwei Gründen:

  • Es ist viel einfacher, den Format-String zu halten, als eine Reihe von Variablen neu anordnen.
  • nimmt String.Format eine IFormatProvider, die in der Zeichenfolge (wie Numerik) eingebettet zu irgendwelchen IFormattable Typen übergeben wird, so dass Sie entsprechende numerische Formatierung für die angegebene Kultur erhalten und insgesamt nur mehr Kontrolle darüber, wie Werte formatiert sind.

Zum Beispiel, da einige Kulturen ein Komma als Dezimalpunkt verwenden würden Sie entweder String oder String.Format sicherstellen wollen, dass Sie CultureInfo.InvariantCulture angeben, wenn Sie sicherstellen wollen, dass die Zahlen die Art und Weise formatiert wurden Sie beabsichtigen.

Zwei weitere Sache zu beachten ...

  • String hat auch eine AppendFormat Funktion, die Ihnen die Flexibilität von String.Format, ohne dass ein unnötigen zweiten Puffer gibt.
  • Wenn Stringbuilder verwenden, stellen Sie sicher, dass Sie den Zweck nicht durch Verketten Parameter besiegen, die Sie anhängen übergeben. Es ist ein leicht zu übersehen.

Andere Tipps

Es gibt keine relevante diference. Aber unter der Annahme, dass String.Format intern einen Stringbuilder verwendet (man kann mit dem Reflektor Werkzeug sehen, dass), direkt StringBuilder.Append verwenden, sollte schneller sein.

EDIT: Natürlich, die „+“ Operator ist die schlechteste Option verwenden, da es eine neue String-Instanz für jede Saite erzeugt, die Sie verketten

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top