MVC框架做了什么来避免它从大量使用反射中继承的低性能

Var*_*n K 7 reflection asp.net-mvc performance razor asp.net-mvc-3

在编写MVC视图时,我看到很多调用Html帮助器方法,如EditorFor/LabelFor.这些扩展在幕后使用了很多反射.再加上路由,模型绑定,验证,EF操作......都是通过反射处理的,我想知道它对性能的影响有多大?

我想知道MVC框架在幕后做什么来解决在如此大规模上使用反射的含义.

我确信它必须做某种缓存,但是知道它究竟做了什么将是一个很好的学习经验,并保证我们不会为了提高生产率而牺牲巨大的性能.

mar*_*ind 10

正如marc_s在评论中所说,使用反射并不一定是坏事.我负责MVC的很多性能调查(我甚至写了几篇关于MVC性能的博客文章),实际应用程序中最大的性能问题是数据库访问.相比之下,其他一切都相形见绌.

但我们确实尽可能地保持核心框架的精简,因此我们会在适当的时候进行缓存.这包括视图文件查找,模型lambda表达式以及更多.了解这一点的最简单的方法很可能是看看源代码,并找到我们使用的地方Dictionary<Type, T>,MemoryCacheHttpContext.Cache.

另一种方法是在分析器下实际运行Mvc应用程序,但这是一个更高级的主题(但如果你搜索它,你会得到一些好的命中).

最后你必须相信我们我们正在做正确的事情:)我们已经优化了很多性能问题,剩下的反射使用只是没有那么大的影响.

这里是史蒂芬史密斯关于调整MVC应用程序性能的视频:http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance