Sobes.tech
Junior
118
questionbank

В чем разница между типами string и StringBuilder в C#?

Answer from AI

sobes.tech AI

Строка string является неизменяемым типом (immutable). Каждая операция, изменяющая строку (например, конкатенация), создает новую строку в памяти. Это может быть неэффективно при частых изменениях, так как требует выделения памяти и сборки мусора.

C#

string s = "Hello";
s += " World"; // Создается новая строка "Hello World"

StringBuilder, напротив, является изменяемым типом (mutable). Он хранит строку в виде буфера, который может динамически расширяться. Операции изменения не создают новую строку, а модифицируют существующий буфер. Это делает StringBuilder более эффективным для операций с частым изменением строк, особенно в циклах или при построении строк из большого количества частей.

C#

using System.Text;

StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World"); // Модифицирует существующий буфер

Основные различия:

Признак string StringBuilder
Изменяемость Неизменяемый Изменяемый
Эффективность Низкая при частых изменениях Высокая при частых изменениях
Использование Для строк, которые редко* меняются Для строк, которые часто* меняются или строятся из частей
Производительность Ниже при большом количестве операций изменения Выше при большом количестве операций изменения

*Редко/часто - зависит от конкретной задачи и количества операций. Как правило, при небольшом количестве изменений (до ~10) разница в производительности между string и StringBuilder может быть неощутима, но при большем количестве операций использование StringBuilder значительно выигрывает.