string
и StringBuilder
в C# используются для работы с текстовыми данными, но имеют разные механизмы управления памятью и производительностью.
string
– неизменяемый тип
string
– это неизменяемый (immutable) тип. Любая операция, изменяющая строку, создаёт новую строку в памяти.
string text = "Hello";
text += " World"; // Создается новая строка, а старая остается в памяти
Console.WriteLine(text); // Hello World
При частом изменении строк string
может вызывать излишнюю нагрузку на память.
StringBuilder
– изменяемый тип
StringBuilder
– это изменяемый (mutable) класс для работы со строками, позволяющий изменять содержимое без создания новых объектов в памяти.
using System.Text;
StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World");
Console.WriteLine(sb.ToString()); // Hello World
В отличие от string
, StringBuilder
изменяет уже существующую строку, что повышает производительность при множественных изменениях.
Производительность
Разница в скорости становится заметной при множественных изменениях строк.
using System;
using System.Text;
class Program
{
static void Main()
{
int iterations = 10000;
string text = "";
for (int i = 0; i < iterations; i++)
{
text += "a";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < iterations; i++)
{
sb.Append("a");
}
}
}
Использование StringBuilder
в этом случае будет значительно быстрее, так как string
создаёт новый объект на каждом шаге.
Когда использовать string
и StringBuilder
string
– если строка изменяется редко или остаётся неизменной.StringBuilder
– если требуется частое изменение строки, например, в цикле или при конкатенации большого количества данных.
Выбор между string
и StringBuilder
зависит от характера работы со строками и требований к производительности.