всегда тестируйте любые запросы вне выбора на данных разработки сначала, чтобы гарантировать, что это оказывает корректное влияние.
Насколько мне известно, TStringBuilder был введен только для некоторого паритета с .NET и Java, кажется, это больше похоже на функцию типа флажка , чем на любую важную advance.
Похоже, что TStringBuilder быстрее в одних операциях, но медленнее в других.
Ваша программа кажется интересной для сравнения с TStringBuilder до / после, но я бы не стал делать это иначе, как в качестве академического упражнения.
TStringBuilder был введен исключительно для обеспечения механизма, совместимого с исходным кодом, для приложений, выполнять обработку строк в Delphi и Delphi.NET . Вы жертвуете некоторой скоростью в Delphi ради некоторых потенциально значительных преимуществ в Delphi.NET
. Концепция StringBuilder в .NET решает проблемы производительности с реализацией строк на этой платформе, проблемы, которые платформа Delphi (собственный код) просто не имеет.
Если вы не пишете код, который необходимо компилировать как для собственного кода, так и для Delphi.NET , тогда там просто нет причин использовать TStringBuilder .
TStringBuilder, как сказал ЛахланГ, по сути, является просто функцией меня. Это необходимо в .NET, потому что строки CLR неизменяемы, но в Delphi такой проблемы нет, поэтому на самом деле не требуется построитель строк в качестве временного решения.
Согласно Марко Канту не для скорости, но вы можете получить более чистый код и лучшую совместимость кода с .Net. Здесь (и некоторые исправления здесь ) другой тест скорости с TStringBuilder не работает быстрее.
Basically, I use these idioms for building strings. The most important differences are:
For complex build patterns, the first make my code a lot cleaner, the second only if I add lines and often includes many of Format
calls.
The third makes my code cleaner when format patterns are important.
I use the last one only when the expression is very simple.
A few more differences between the first two idioms:
TStringBuilder
has many overloads for Append
, and also has AppendLine (with only two overloads) if you want to add lines like TStringList.Add
can TStringBuilder
reallocates the underlying buffer with an over capacity scheme, which means that with large buffers and frequent appends, it can be a lot faster than TStringList
TStringBuilder
content, you have to call the ToString method which can slow things down.So: speed is not the most important matter to choose your string appending idiom. Readable code is.