Was ist der effizienteste Weg, um Zeichenfolgen zu verketten?
StringBuilderAnwendungsfällen finden Sie hier .
String.Formatbei Steroiden. Welche, Leistung klug, ist ein winzig bisschen langsamer an einem Liner als +und String.Concat, aber viel besser als die, wenn auch langsamer als StringBuilderbei mehreren Anrufen. In der Praxis sind die Leistungsunterschiede so groß, dass ich, wenn ich nur einen Weg zum Verketten wählen müsste, String-Interpolationen mit $... Wenn zwei Wege wählen würde , dann füge StringBuildersie meiner Toolbox hinzu. Mit diesen beiden Möglichkeiten sind Sie eingestellt.
String.JoinAntwort wird nicht +gerecht und ist praktisch eine schlechte Methode, um Zeichenfolgen zu verketten, aber in Bezug auf die Leistung ist sie überraschend schnell. Die Antwort warum ist interessant. String.Concatund String.Joinkann beide auf Arrays wirken, ist aber String.Jointatsächlich schneller. Anscheinend String.Joinist es ziemlich ausgefeilt und optimierter als String.Concat, teilweise weil es ähnlich funktioniert, StringBuilderindem es zuerst die Stringlänge berechnet und dann den String erstellt, der von diesem Wissen profitiert, indem es UnSafeCharBuffer verwendet.
String.Joinerfordert auch eine Reihe konstruieren , die Ressource ineffizient Recht scheint? ... Es stellte sich heraus , dass +und String.ConcatKonstrukt - Arrays für ihre Bestandteile sowieso. Folglich ist das manuelle Erstellen und Zuführen eines Arrays String.Joinvergleichsweise schneller. Es StringBuilderübertrifft jedoch String.Joinin nahezu jeder praktischen Hinsicht, während $es bei langen Zeichenfolgen nur geringfügig langsamer und viel schneller ist. Ganz zu schweigen davon, dass die Verwendung umständlich und hässlich ist, String.Joinwenn Sie dies getan haben um vor Ort ein Array dafür zu erstellen.