Что делает инфраструктура MVC, чтобы избежать низкой производительности, которую она наследует от интенсивного использования рефлексии - PullRequest
7 голосов
/ 13 августа 2011

При написании представлений MVC я вижу много вызовов вспомогательному методу Html, например EditorFor/LabelFor.Эти расширения используют много размышлений за кулисами.В сочетании с тем, как маршрутизация, привязка модели, проверка, манипулирование EF ... все обрабатываются с помощью отражения, мне интересно, насколько это влияет на производительность?

Я хочу знать, что MVC Framework делает под капотом для решения проблемиспользования рефлексии в таком крупном масштабе.

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

1 Ответ

10 голосов
/ 13 августа 2011

Как сказал marc_s в комментарии, использование отражения не обязательно плохо.Я отвечаю за многие исследования производительности для MVC (и я даже написал несколько постов в блоге о производительности MVC ), и самая большая проблема в реальных приложениях - доступ к базе данных.Все остальное бледнеет в сравнении.

Но мы стараемся поддерживать базовую структуру как можно более простой, и поэтому мы делаем кеширование там, где это необходимо.Это включает в себя просмотр файлов просмотра, модели лямбда-выражений и многое другое.Самым простым способом узнать об этом, вероятно, было бы посмотреть на исходный код и найти места, где мы используем Dictionary<Type, T>, MemoryCache или HttpContext.Cache.

Другим способом было бы запустить приложение Mvc под профилировщиком, но это более сложная тема (хотя, если вы ее найдете, вы получите несколько хороших результатов).

В конце концов, вы должны верить нам в то, что мы поступаем правильно :) Мы уже оптимизировали многие проблемы перфорирования, и оставшееся использование рефлексии не оказывает такого большого влияния.*

А вот отличное видео от Стивена Смита о настройке производительности приложения MVC: http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...