Ребят, у меня возникли вопросы по строкам в c#.
Чем отличается класс String от StringBuilder?
Зачем нужно такое разделение?
В чем преимущества того и другого?
Что из этого лучше использовать?
Почему StringBuilder лучше использовать для работы с большими объемами текста?
По возможности ответьте с примерами. Заранее спасибо за ответ.
Ответ
String - это строки. Они неизменяемые т.е. конкретную строку нельзя подправить/дописать/укоротить. Любые операции над строками приводят к созданию новой строки (с копированием всего текста). При этом старая строка уходит в мусор (если у вас не остается на нее ссылки).
Так сделано из соображений
Экономии памяти - не надо подстраховываться и копировать строку "на всякий случай" при передаче куда-то в другой метод. Он ее точно никак не испортит.
Производительности - можно высчитывать хэш строки один раз, и не заморачиваться с поддержанием его актуальности. Это дает быстрые сравнения строк на равенство (особенно если строки разные).
Безопасности - код может спокойно работать с пришедшими извне строками, не опасаясь что кто-то влезет в строку по дороге.
Простоты работы с несколькими потоками - нет проблемы одновременных изменений.
Соответственно, при сборке большой строки из многих маленких эта особенность - неизменяемость строк - приводит к множественному копированию данных и к генерации большого количества мусора.
Для решения этой проблемы есть класс StringBuilder. Это не "строка", а класс для сборки строк из кусков, позволяющий в конце получить результирующую строку вызовом StringBuilder.ToString()
Если вам надо просто работать со строками - используете String
Если вам надо собрать одну большую строку из пачки маленьких - используете StringBuilder
Комментариев нет:
Отправить комментарий