Verwandte / Duplikatfragen
String und StringBuilder
An welchem Punkt wird ein StringBuilder verwendet? unbedeutend werden oder ein Overhead?
So einfach wie möglich habe ich diese Methode 1 :
%Vor%Ich frage mich, ob Methode 2 schneller wäre, wenn ich es tun würde:
%Vor%Sie könnten auch String.Format ausprobieren, von dem ich glaube, dass es intern einen StringBuilder verwendet, aber die Lesbarkeit erhöht.
%Vor%(Dies ist für C #)
Bei kleinen Programmen ist dies eine vorzeitige Optimierung .
Wenn Sie diese Art der Optimierung in Betracht ziehen wollen, dann messen Sie sie besser, denn dies hängt von der Größe der verketteten Zeichenkette ab, abgesehen von der Zahl oder den Anhängen.
Abgesehen davon, dass die StringBuilder-Methode besser aussieht und liest, übertrifft StringBuilder die String-Verkettung nach 5 bis 10 hinzugefügten Strings gemäß Ссылка
In C # wird ein Ausdruck in der Form "a" + b + "c"
vom Compiler in String.Concat("a", b, "c")
optimiert, so dass Sie keine intermediären Zeichenfolgen erhalten. Dies wäre effizienter als ein StringBuilder.
Von hier :
Die Java-Sprache bietet spezielle Unterstützung für die String-Verkettung Operator (+) und für die Konvertierung von andere Objekte zu Strings. Zeichenfolge Verkettung wird durch implementiert die StringBuffer-Klasse und ihr Append Methode.
Es scheint also, dass der Compiler in Ihrem Namen trotzdem StringBuffer
verwendet.
Ein guter Compiler sollte das für dich optimieren - aber nimm mein Wort dafür nicht, wenn du es leicht selbst herausfinden kannst.
Wenn Sie dies nicht in einer engen Schleife tun, ist der Unterschied in der Leistung wahrscheinlich unbedeutend.
String-Verkettung von Werten ist normalerweise eine schlechte Methode zum Erstellen von SQL-Anweisungen, wenn Sie stattdessen Bind-Variablen verwenden können. Dadurch kann die Datenbank die Abfragen optimieren. Die Verwendung von bind macht wahrscheinlich einen größeren Unterschied als die Optimierung der String-Konstruktion - und mit Bind müssen Sie die Zeichenfolge nur einmal pro Sitzung und nicht einmal pro Abfrage erstellen.
Ihre beiden Methoden unterscheiden sich nicht in der Leistung. Der Grund dafür ist, dass Ihre Zeichenfolge in einem Ausdruck konkateniert ist und der Compiler einen StringBuilder für diesen Ausdruck erstellt. Die folgenden sind äquivalent und ergeben den gleichen Code:
%Vor%Wenn Ihr Code den Ausdruck teilt, zum Beispiel in einer Schleife, wird die Erstellung eines eigenen StringBuilders besser, die naive Version mit String + Verkettungsergebnissen nach dem Kompilieren in Code wie:
%Vor%Das Erstellen Ihrer Methode mit einem expliziten StringBuilder kann die Erstellung von unnötigen StringBuilder-Objekten speichern.
Bei einfachen Methoden müssen Sie die Verkettung von Strings normalerweise nicht selbst optimieren, aber in den Situationen, in denen der Code auf dem kritischen Pfad liegt oder Sie gezwungen sind, viele verschiedene Zeichenfolgenausdrücke zu verwenden, um Ihr Endergebnis aufzubauen, ist dies der Fall Gut zu wissen, was unter der Haube passiert, damit Sie entscheiden können, ob sich der Mehraufwand lohnt.
Beachten Sie, dass StringBuffer Thread-sicher ist, StringBuilder nicht. StringBuilder ist die schnellere Wahl für Situationen, in denen Multithread-Zugriff kein Problem ist.