Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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