Повышение производительности маркировки методов класса как статических - PullRequest
1 голос
/ 24 августа 2011

Я использую FxCop для поиска улучшений в нашем приложении. Одним из правил, которые мы часто нарушаем, является «Пометить элементы как статические», помеченные как правило производительности.

Конечно, у нас есть много методов класса, которые не работают ни с одним из членов класса, которые могут быть помечены как статические, но действительно ли это дает прирост производительности?

Насколько я понимаю, статика будет реализована один раз во время выполнения. Если метод никогда не вызывается, это было бы пустой тратой. Если метод вызывается несколько раз, это может принести небольшую выгоду.

С переменными есть очевидные последствия того, помечены ли они как статические или нет, и для работы вашего приложения очень важно то, как они определены. Для методов, хотя я не верю, что существует какое-либо функциональное влияние на то, помечены ли они как статические или нет, если они не ссылаются на какие-либо переменные или методы экземпляра.

Я что, упускаю суть здесь? Является ли стандартом пометить все эти методы как статические?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Производительность повышается, поскольку статический метод не имеет скрытого указателя «this».

Каждый экземпляр (не статический) метод имеет скрытый указатель «this», который передается методу для доступа к членам экземпляра.,Если не используются нестатические элементы, указатель «this» остается неиспользованным.Передача дополнительного параметра в стек или в регистр ЦП требует времени, которое можно сохранить, объявив такой метод как статический.

«Насколько я понимаю, статический экземпляр будет создан один раз во время выполнения."

И статические, и нестатические методы существуют только один раз в программном коде.Только нестационарные члены данных дублируются, когда существуют разные экземпляры классов.Нестатический метод класса работает с конкретным экземпляром, используя ссылку на класс (скрытый параметр).Сам код никогда не дублируется.

0 голосов
/ 24 августа 2011

Как вы сказали, когда метод помечен как статический, он создается один раз, при первом использовании. Когда бы ни делались последующие вызовы, среде выполнения не нужно проверять ее, потому что она гарантированно существует. Вот документ Microsoft для этого: http://msdn.microsoft.com/en-us/library/ms245046%28v=vs.80%29.aspx

Вот еще несколько указаний: Метод можно сделать статичным, но разве не так?

...