Мне интересно о преимуществах использования stringbuilder, когда дело доходит до использования памяти в C#.При вызове append на stringbuilder мы добавляем строки в кучу?
Если у вас есть следующий сценарий:
var strBuilder = new StringBuilder();
for(int i=0;i<1000;i++)
{
strBuilder.Append(i); /// is this not calling i.ToString(); ???
strBuilder.Append(','); /// this i character comma
strBuilder.Append(" and "); /// this is creating a new string " and " right ?
strBuilder.Append(','); // this is a character comma, and not a string, this is value type
}
Мой вопрос заключается в следующем: Каждый раз, когда мы вызываем метод Append, мы находимся не создает строку, которая затем используется из StringBuilder, который будет добавляться и добавлен в внутренний массив символов - буфер?
Я предполагаю, что всякий раз, когда мы добавляем что-то, мы также создаем строку, которая должна быть добавлена, а затем она сидит на куче, ожидая сбора мусора. Разве это не удар производительности для кучи?
Потяните литералы за пределы петли. –
Указанный код выделяет 1001 объект. При добавлении к String вместо StringBuilder вы выделите 7000 объектов. Большая разница. –