Вопрос о потреблении памяти в .NET - PullRequest
1 голос
/ 28 октября 2010

Использует ли один из этих методов больше памяти, чем другой, или увеличивает загрузку ГХ?

Вариант № 1

LargeObject GetObject()
{
    return new LargeObject();
}

Вариант № 2

LargeObject GetObject()
{
    LargeObject result = new LargeObject();
    return result;
}

Ответы [ 3 ]

5 голосов
/ 28 октября 2010

Использование кучи памяти обоих методов одинаково. Во втором случае создание локальной переменной незначительно, но это не должно вас беспокоить. Переменная будет храниться в стеке и не вызовет никакого дополнительного давления для GC. Также эта дополнительная переменная может быть оптимизирована компилятором или JIT (поэтому она может отсутствовать в коде, фактически выполняемом CLR).

3 голосов
/ 28 октября 2010

Компилятор сгенерирует IL, который эквивалентен версии 2 вашего кода, для хранения ссылки на объект требуется расположение в виртуальном стеке. Оптимизатор JIT сгенерирует машинный код, который эквивалентен версии 1 вашего кода, ссылка хранится в регистре процессора.

Другими словами, это не имеет значения. Вы получаете точно такой же машинный код во время выполнения.

1 голос
/ 28 октября 2010

Вы можете посмотреть на сгенерированный IL (используя отражатель) и посмотреть, отличается ли он вообще.В зависимости от настроек оптимизации компиляции, # 2 может хранить дополнительное значение в стеке (для значения result), но это будет только дополнительные 4 или 8 байтов (если это класс, каким он должен быть!),и никак не повлияет на сборщик мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...