Использование памяти при преобразовании методов в статические методы

Я начал использовать Resharper, и он указал, когда метод мог быть сделан статичным. Был бы, преобразовывая несколько сотен методов в увеличение статических методов объем потребляемой памяти за большой промежуток времени?

10
задан Ian R. O'Brien 25 June 2010 в 18:00
поделиться

2 ответа

Нет - переход на статические методы не влияет на память.

При первом обращении к типу (статическому или нестатическому) инициализируются все статические члены и запускаются статические конструкторы.

Однако, если вы только рассматриваете возможность переключения методов с нестатических на статические, это никак не повлияет на сборку мусора или общий объем памяти.

Вам следует беспокоиться об изменении объема памяти только в том случае, если вы меняете члены класса на статические. В этом случае статические поля будут оставаться в корне после обращения к типу и не будут собираться GC. Обычно это делается только при необходимости и по замыслу - вы делаете член статическим, потому что хотите, чтобы он сохранялся.

15
ответ дан 3 December 2019 в 17:57
поделиться

С точки зрения JIT-компилятора, нет никакой разницы между статическим методом и методом экземпляра. Машинный код для них очень похож, он хранится в такой же куче. Единственное отличие состоит в том, что у метода экземпляра есть дополнительный аргумент.

Этот дополнительный аргумент необходимо передать при вызове метода. Это может стоить дополнительной инструкции машинного кода, но не так часто. Регистр ЦП (ECX) часто уже имеет правильное значение. Существует разница, если метод экземпляра имеет более одного аргумента на x86 или более трех на x64, дополнительный аргумент должен быть передан в стек, а не через регистр ЦП. Одна дополнительная инструкция.

В худшем случае, вы смотрите на немного меньше наносекунды. Это будет трудно измерить, обычная проблема с микрооптимизациями.

7
ответ дан 3 December 2019 в 17:57
поделиться
Другие вопросы по тегам:

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