Методы расширения слишком дороги? - PullRequest
2 голосов
/ 16 августа 2010

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

Ответы [ 4 ]

9 голосов
/ 16 августа 2010

Сколько это будет стоить для моих программ производительность, если я добавлю методы расширения к этому? Это будет работать медленнее или может быть будет загружаться медленнее?

Там не будет никакого удара производительности. Методы расширения - это действительно статические методы.

4 голосов
/ 17 августа 2010

Я быстро протестировал производительность, используя несколько целочисленных методов расширения в ДЕЙСТВИТЕЛЬНО длинном цикле, и обнаружил, что в тестируемых случаях производительность в целом была одинаковой. При отладке или запуске неоптимизированных сборок методы расширения выполнялись примерно вдвое медленнее, чем мои контрольные случаи, это имеет смысл, потому что отладчик не может встроить эти методы и должен отслеживать вызов стека и т. Д.

Итак, в сборке, готовой к выпуску, нет потери производительности.

4 голосов
/ 17 августа 2010

Метод расширения - это просто синтаксический сахар, применяемый к статическому методу.

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

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

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

1 голос
/ 16 августа 2010

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

Как работать медленнее?Только измерение времени, затраченного на метод расширения и метод без расширения, покажет наверняка.Я подозреваю, что разница не будет существенной, даже если она действительно измерима.

Важное соображение всегда должно заключаться в том, «делает ли метод расширения мой код более понятным и легким для понимания и сопровождения».

...