Методы расширения слишком дороги?
-
28-09-2019 - |
Вопрос
Сколько это будет стоить для моих программ производительности, если я добавлю к этому методы расширения?
Будет работать медленнее или может быть загружен медленнее?
Спасибо.
Решение
Сколько это будет стоить для моих программ производительности, если я добавлю к этому методы расширения? Будет работать медленнее или может быть загружен медленнее?
Там не будет удара по производительности. Методы расширения - это действительно статические методы.
Другие советы
Метод расширения является просто синтаксическим сахаром, применяемым к статическому методу.
Теоретически, статический метод быстрее, чем метод не виртуального экземпляра (не нужно проверять нулевой this
), который, в свою очередь, быстрее, чем метод виртуального экземпляра (нет необходимости искать реализацию для вызова).
Теоретически, оптимизации могут избавиться от этих различий. Это также переоценивается с точки зрения статического, когда речь идет о методах расширения, поскольку объект, вероятно, будет рассматриваться таким образом, как требуется нулевая проверка (независимо от того, явное или неявное для того, как он используется) в любом случае.
На практике есть вероятность, что какой бы метод расширения окажет гораздо большее влияние, будь то расширение или экземпляр.
Я быстро производительность проверил это, используя некоторые целочисленные методы расширения в действительно длительной петле и обнаружили, что в тех случаях, когда я проверял, производительность обычно была идентична. При отладке или запуске неоптимизированных сборок методы расширения работали примерно в два раза медленно, так как мои контрольные случаи имеют смысл, потому что отладчик не может встроить эти методы и должен отслеживать отслеживание CallStack и т. Д.
Итак, в сборке, готовой к выпуску, без штрафа за производительность.
Это, безусловно, не будет загружаться медленнее, так как загрузка программы не зависит от путей выполнения в программе.
Что касается бега медленнее? Только измерение времени, взятого для метода расширения, и метода неэклейки, наверняка будет показано. Я подозреваю, что разница не будет значительной, даже если она действительно измерима.
Важным рассмотрением всегда должно быть «Метод расширения делает мой код более четкой и легче понимать и поддерживать».