Найти тему
.Net Review

String vs StringBuilder. Когда что использовать? Обзор StringBuilder

Оглавление

Несмотря на большое количество удобных методов у класса System.String она имеет свои недостатки. Для решения этих недостатков был добавлен класс StringBuilder. Подробнее в этой статье.

System.String

Класс, позволяющий хранить строку размером до 1 миллиарда символов. Реализовано большое количество методов/функций для редактирования, вырезания, нахождения строки и т.д. Размер выделяется относительно количество символов.

Проблема

Проблемой System.String является пересоздание объекта. Это значит, что когда мы изменяем переменную System.String (string), то эта переменная пересоздается с новыми данными. При большом количестве подобных операций это может сказаться на производительности. Для решения этой проблемы был создан System.Text.StringBuilder.

System.Text.StringBuilder

Также содержит в себе строку, но его работа немного отличается от string. При редактировании переменной StringBuilder переменная изменяется (невероятно). Для реализации такой работы на переменную StringBuilder выделяется больше памяти (подробнее).

При инициализации можем указать строку или размер переменной.

Основные методы/функции:

  • Insert. Вставляет строку в объект StringBuilder, начиная с определенного индекса.
  • Remove. Удаляет определенное количество символов, начиная с определенного индекса.
  • Replace. Заменяет все вхождения относительно строки/символа поиска.
  • AppendFormat. Добавляет строку в конец объекта StringBuilder.

Функций относительно System.String совсем не много, однако это самые используемые.

Пример

-2

Для примера воспроизведем основные функции.

-3

Результат.

Итог

Microsoft рекомендует использовать класс String в следующих случаях:

  • При небольшом количестве операций и изменений над строками.
  • При выполнении фиксированного количества операций объединения. В этом случае компилятор может объединить все операции объединения в одну.
  • Когда надо выполнять масштабные операции поиска при построении строки, например IndexOf или StartsWith. Класс StringBuilder не имеет подобных методов.

Класс StringBuilder рекомендуется использовать в следующих случаях:

  • При неизвестном количестве операций и изменений над строками во время выполнения программы.
  • Когда предполагается, что приложению придется сделать множество подобных операций.
Источники: Microsoft StringBuilder, перевод Итогов.

Телеграмм канал: https://t.me/dotnetreview