Когда и почему я должен использовать TStringBuilder?

всегда тестируйте любые запросы вне выбора на данных разработки сначала, чтобы гарантировать, что это оказывает корректное влияние.

15
задан lkessler 18 October 2009 в 20:13
поделиться

5 ответов

Насколько мне известно, TStringBuilder был введен только для некоторого паритета с .NET и Java, кажется, это больше похоже на функцию типа флажка , чем на любую важную advance.

Похоже, что TStringBuilder быстрее в одних операциях, но медленнее в других.

Ваша программа кажется интересной для сравнения с TStringBuilder до / после, но я бы не стал делать это иначе, как в качестве академического упражнения.

13
ответ дан 1 December 2019 в 00:11
поделиться

TStringBuilder был введен исключительно для обеспечения механизма, совместимого с исходным кодом, для приложений, выполнять обработку строк в Delphi и Delphi.NET . Вы жертвуете некоторой скоростью в Delphi ради некоторых потенциально значительных преимуществ в Delphi.NET

. Концепция StringBuilder в .NET решает проблемы производительности с реализацией строк на этой платформе, проблемы, которые платформа Delphi (собственный код) просто не имеет.

Если вы не пишете код, который необходимо компилировать как для собственного кода, так и для Delphi.NET , тогда там просто нет причин использовать TStringBuilder .

8
ответ дан 1 December 2019 в 00:11
поделиться

TStringBuilder, как сказал ЛахланГ, по сути, является просто функцией меня. Это необходимо в .NET, потому что строки CLR неизменяемы, но в Delphi такой проблемы нет, поэтому на самом деле не требуется построитель строк в качестве временного решения.

6
ответ дан 1 December 2019 в 00:11
поделиться

Согласно Марко Канту не для скорости, но вы можете получить более чистый код и лучшую совместимость кода с .Net. Здесь (и некоторые исправления здесь ) другой тест скорости с TStringBuilder не работает быстрее.

7
ответ дан 1 December 2019 в 00:11
поделиться

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
  • To get the 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.

11
ответ дан 1 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: