Какую проблему решает StringBuilder?

Зачем мне использовать StringBuilder поверх просто добавляемых строк? Например, почему реализовать как:

StringBuilder sb = new StringBuilder;
sb.Append("A string");
sb.Append("Another string");

над

String first = "A string";
first += "Another string";

?

4 ответа

Решение

Документация StringBuilder объясняет его назначение:

Объект String является неизменным. Каждый раз, когда вы используете один из методов в классе System.String, вы создаете новый строковый объект в памяти, который требует нового выделения пространства для этого нового объекта. В ситуациях, когда вам необходимо выполнить повторные модификации строки, накладные расходы, связанные с созданием нового объекта String, могут быть дорогостоящими. Класс System.Text.StringBuilder можно использовать, когда вы хотите изменить строку без создания нового объекта. Например, использование класса StringBuilder может повысить производительность при объединении множества строк в цикле.

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

StringBuilder изменчив. Строки нет. Таким образом, любая операция над строкой создает новый объект. Во втором примере создаются 2 объекта (по одному в каждой строке). В то время как в первом создан только один объект.

В основном проблемы с неизменяемостью строк. Также он предоставляет методы для более простого манипулирования строкой. Взгляните на использование класса Stringbuilder

Другие вопросы по тегам