@nikifovadim
Software Engineer

Зачем нужен StringBuilder? В каких случаях нужно использовать StringBuilder? Что мы выиграем используя StringBuilder?

В каких случаях нужно использовать StringBuilder? У строки есть метод String.Concat, есть перегруженный оператор + то есть все что можно сделать StringBuilder можно сделать и обычных методов сроковых. Зачем нужен StringBuilder?

Вот у нас есть две огромные строки каждая условно по 1 гигабайту. Вот мы их конкатенируем с помощью String.Concat получим третью строку длинной 2 гигабайта. Сделаем тоже самое с помощью StringBuilder. Что мы выиграем?
  • Вопрос задан
  • 1178 просмотров
Решения вопроса 2
ayazer
@ayazer
Sr. Software Engineer
смотрите лучше на пример когда у вас 1000 строк по 1мб.

1000 строк по 1мб = 1Гб выделения памяти при загрузке, и еще (1+1000)/2 * 1000 ~ 500 Гб выделения памяти чтоб хранить промежуточные результаты (2мб сумма первых двух, 3мб сумма первых 3ех, 4мб сумма первых 4...)

в случае со стрингбилдером у вас будет 1Гб выделения памяти памяти при загрузке + еще 1гб чтоб со всего этого собрать одну мега строку
Ответ написан
Комментировать
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Вот у нас есть две огромные строки каждая условно по 1 гигабайту. Вот мы их конкатенируем с помощью String.Concat получим третью строку длинной 2 гигабайта. Сделаем тоже самое с помощью StringBuilder. Что мы выиграем?

В этом случае ничего.

StringBuilder позволяет снизить потребления памяти в случае если вы постепенно инкрементите какую-то строку, например генерите json из кусочков.
String.Concat будет каждый раз создавать новую строку и аллоцировать память.
StringBuilder содержит в себе коллекцию Char, которая дополняется и памяти аллоцируется меньше.

В документации это подробно изложено, рекомендую
https://docs.microsoft.com/ru-ru/dotnet/api/system...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Самое главное в билдере это скорость. Это очень заметно при построении html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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