Ich habe eine Anweisung, in der eine Zeichenfolge auf die folgende Weise zugewiesen wird:
%Vor% Gibt es Leistungsunterschiede zwischen i.ToString()
oder einfach nur i
, da beide nur in die (kulturinvariante?) Zeichenkette umgewandelt werden?
Ich bin mir der Existenz von String.Concat()
, String.Format
, StringBuilder
usw. sehr wohl bewusst, aber für diesen Fall nehmen wir an, dass ich nur +
Verkettung verwenden darf.
Vielen Dank im Voraus.
+
Verkettung verwendet String.Concat
auf jeden Fall - String
selbst legt keinen + Operator offen.
Also zum Beispiel:
%Vor%ist zusammengestellt in:
%Vor% Wenn Sie ToString
direkt aufrufen, vermeiden Sie das Boxen und rufen die Concat(string, string)
Überladung auf. Daher wird die Version mit dem ToString
-Aufruf etwas effizienter sein - aber ich bezweifle stark, dass dies von Bedeutung sein wird, und ich würde Sie dringend bitten, mit der Version zu gehen, die Sie besser lesen können .
ToString ist die Standardmethode zum Schreiben eines Objekts. Also, wenn Sie "i" oder "i.ToString ()" verwenden, ist das Gleiche.
Wenn Sie etwas über das Überladen von Operatoren in C ++ wissen, können Sie verstehen, wie "+" in diesem Fall funktioniert.
%Vor%Ergebnis: msg: Alter ist 10. großartig?
s1: 15: Zwei plus drei ist 23
s2: 15: Zwei plus drei ist 5
Ich würde .ToString () aus Gewohnheit und Lesbarkeit verwenden, ich bin mir sicher, dass Sie woanders eine bessere Performance finden werden.
Da Ihre Resultierende in string ist und i int ist, wird "Bar _" + i verkettet und ruft .ToString () auf, damit das Objekt mit einer Zeichenkette verbunden wird. in Bezug auf die Leistung können Sie einige Leistungsmessungswerkzeuge verwenden
Ich benutze im Allgemeinen Casting, wenn ich zwei Diff-Objekte habe
Wie bereits von Jon Skeet erwähnt, ist der Punkt über Boxen sehr wichtig!
Wenn Sie explizit ToString () verwenden, gibt es kein Boxen, was bedeutet, dass um i keine Objektbox erstellt wird. Die Objektbox um i herum muss später vom Garbage Collector weggeworfen werden, was zu einer Leistungseinbuße führt.
Wenn Sie es nur ein paar Mal in Ihrem Programm tun, spielt es keine Rolle, aber wenn Sie sehr oft boxen, sollten Sie sich für die ToString () Version entscheiden.