Я начал использовать Resharper, и он указал, когда метод можно сделать статическим. Будет ли преобразование нескольких сотен методов в статические увеличивать объем памяти в течение длительного периода времени?
Использование памяти при преобразовании методов в статические методы
Ответы (2)
Нет — переход на статические методы не влияет на память.
При первой ссылке на тип (будь то статический или нестатический) инициализируются все статические члены и запускаются статические конструкторы.
Однако, если вы просто рассматриваете возможность переключения методов с нестатических на статические, это не повлияет на сборку мусора или общий объем памяти.
Вам нужно беспокоиться об изменении объема памяти только в том случае, если вы сделаете члены класса статическими. В этом случае статические поля останутся корневыми после доступа к типу и не будут собираться сборщиком мусора. Обычно это делается только при необходимости и по замыслу — вы делаете член статическим, потому что хотите, чтобы он сохранялся.
С точки зрения компилятора JIT нет никакой разницы между статическим методом и методом экземпляра. Машинный код для них очень похож, он хранится в такой же куче. Единственное отличие состоит в том, что метод экземпляра имеет дополнительный аргумент.
Этот дополнительный аргумент необходимо передать при вызове метода. Это может стоить дополнительной инструкции машинного кода, но не так часто. Регистр ЦП (ECX) часто уже имеет правильное значение. Есть разница, если метод экземпляра имеет более одного аргумента на x86 или более трех на x64, дополнительный аргумент должен быть передан в стек, а не через регистр ЦП. Одна дополнительная инструкция.
В худшем случае вы смотрите на чуть меньше наносекунды. Это будет трудно измерить, обычная проблема с микрооптимизациями.