Ответ
StringBuilder — это класс в .NET, оптимизированный для эффективной работы с изменяемыми строками. В отличие от обычных строк (string), которые являются иммутабельными (каждое изменение создает новый объект в памяти), StringBuilder использует внутренний буфер символов, который можно изменять без постоянных переаллокаций.
Ключевые принципы работы:
- Буфер в памяти:
StringBuilderхранит символы в массиве (char[]). При создании можно задать начальную емкость (capacity). - Динамическое расширение: Если при добавлении данных (
Append,Insert) места в буфере не хватает, он автоматически увеличивается (обычно удваивается). Это дорогая операция, поэтому при известном ожидаемом размере строки лучше задать начальную емкость в конструкторе. - Изменение на месте: Методы
Append(),Insert(),Remove(),Replace()иClear()работают с существующим буфером. - Финальное преобразование: Метод
ToString()создает новую неизменяемую строку (string) на основе текущего содержимого буфера.
Пример использования:
// Создание с начальной емкостью (оптимизация для больших строк)
var sb = new StringBuilder("Hello", 50);
// Эффективная конкатенация в цикле
for (int i = 0; i < 100; i++)
{
sb.Append(i); // Не создает 100 новых строковых объектов
}
// Другие операции
sb.Insert(5, " C#"); // "Hello C#0123..."
sb.Replace("Hello", "Hi"); // "Hi C#0123..."
// Получение результата
string finalString = sb.ToString();
Когда использовать StringBuilder:
- Конкатенация строк в циклах (особенно с большим числом итераций).
- Построение больших строк из множества фрагментов (например, генерация HTML, SQL-запросов, JSON).
Когда НЕ нужно использовать: Для простой конкатенации нескольких строк (string.Concat или интерполяция $"{} {}"`) обычно достаточно и эффективнее.
Видео-ответы
▶
▶
▶
▶
▶