Использование памяти при преобразовании методов в статические методы - PullRequest
10 голосов
/ 25 июня 2010

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

Ответы [ 2 ]

15 голосов
/ 25 июня 2010

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

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

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

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

7 голосов
/ 25 июня 2010

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

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

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

...