Ich bin wirklich überrascht, dass in keinem der Kommentare oder Beispiele erwähnt wurde, dass Sie TStringBuilder anweisen können, einen Puffer entsprechend der Aufgabe während der Instantiierung vorab zuzuweisen. Mit anderen Worten, wenn Sie eine einfache Schätzung darüber abgeben können, wie viel Speicherplatz Sie wahrscheinlich benötigen werden, fügen Sie das etwas hinzu und verwenden Sie diesen Wert, um TStringBuilder zu instantiieren, um die Speicherreallokationen zu vermeiden, die die einfache Zeichenkettenverkettung stark verlangsamen:
buff := TStringBuilder.Create( tmpEstimatedSize );
Ich verwende TStringBuilder regelmäßig in neuem Code und zur Optimierung von altem Code, und die CPU-Einsparungen beim schrittweisen Aufbau großer Zeichenketten sind dramatisch. Um transparent zu sein, wenn ich nur eine Handvoll Zeichenketten verketten muss, beschäftige ich mich nicht mit TStringBuilder. Aber wenn ich beispielsweise Daten serialisiere, die potenziell eine große Datenmenge sein könnten, ist TStringBuilder die offensichtliche Lösung.
1 Stimmen
Du findest möglicherweise diese Serie von Blog-Einträgen interessant.
1 Stimmen
Sie möchten TStringBuilder nicht verwenden. Es ist sehr langsam.