String/StringBuilder, какой том вы используете один над другим
-
22-07-2019 - |
Вопрос
Пятница, время рефакторинга!!!
У меня есть объект, который я использую для генерации операторов SQL.
oDb.From устанавливается один раз.Затем метаданные могут со временем добавлять соединения, пока мы все это не объединим и не вернем обратно.
Итак, вопрос: сколько раз я сохраняю синтаксис oDb.From +=, прежде чем заменить его на sbFrom.Append()?
Это № 3, 4 или 15 раз?
Или это действительно проблема с длиной контента, и если да, то какой магический #?
ТИА
Решение
Читать http://www.codinghorror.com/blog/archives/001218.html
А StringBuilder
Класс предназначен для сценариев, в которых вы создаете огромные строки, и использование обычной конкатенации строк действительно было бы слишком медленным.
Скорее всего, для той длины строки, с которой вы имеете дело, это вообще не будет иметь никакого значения - просто используйте то, что вам наиболее удобно.
Другие советы
Совершенно ненаучное правило:Я бы сделал это для элементов, превышающих три — не из-за повышения производительности, а скорее (надеюсь) по хорошей привычке.
Если мне нужно добавить к строке более двух элементов, я почти всегда использую StringBuilder (я обнаружил, что если я добавляю более двух элементов, их неизбежно будет больше, поскольку люди начнут добавлять в мой код... так что StringBuilder уже доступен для их).
Я бы сказал все, что вы ожидаете иметь длину более 1-5 МБ, или что-то, что распределяет множество строк небольшими фрагментами.
В этом нет ничего ненаучного — я когда-то читал статью, в которой в .NET построитель строк действительно становится более эффективным после 5 конкатенаций.Именно здесь я обычно использую String Builder.
Кроме того, я думаю, что в этом отношении действительно важна читаемость, и в некоторых случаях я предпочитаю строковый формат обоим.
Я использую StringBuilder, когда количество конкатенаций в алгоритме превышает O(n).Если число конкатенаций равно O(1), в большинстве случаев читаемость не страдает (за исключением случаев, когда строка очень велика, что случается не очень часто).
Или когда я знаю, что есть строка, которая станет достаточно большой.(более 100 тыс. символов)