wildHunt
@wildHunt

Почему Rider жалуется на выделение памяти при работе со StringBuilder`ом?

Немножко играюсь с BenchmarkDotNet и не могу понять почему Rider жалуется на проблемы с выделением памяти.
[RankColumn]
[MemoryDiagnoser]
public class Bench
{
    private string _hello = "Hello";
    
    [Benchmark]
    public void StringBench()
    {
        string str = string.Empty;
        
        for (int i = 0; i < 10000; i++)
        {
            str += _hello;
        }
    }
    
    [Benchmark]
    public void StringBuilderBench()
    {
        var str = new StringBuilder();
        
        for (int i = 0; i < 10000; i++)
        {
            str.Append(_hello);
        }
    }
}

После запуска бенча Rider подсвечивает строку с методом Append, мол проблема, выделяется много памяти. Почему так?
62e77df246032660857774.png

Причем в самих результатах вроде не так много выделяется
62e77f55b25e8018396722.png
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
Griboks
@Griboks Куратор тега C#
В дополнении к freeExec советую прочитать документацию. Там написано, что append добавляет копию _hello, а также даётся совет указать в конструкторе планируемую ёмкость результирующей строки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Потому что вы всё больше и больше пихаете в StringBuilder и ему надо всё больше и больше памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы