Asp.net mvc MVC框架如何避免因大量使用反射而导致的低性能

Asp.net mvc MVC框架如何避免因大量使用反射而导致的低性能,asp.net-mvc,performance,asp.net-mvc-3,reflection,razor,Asp.net Mvc,Performance,Asp.net Mvc 3,Reflection,Razor,在编写MVC视图时,我看到很多对Html助手方法的调用,例如EditorFor/LabelFor。这些扩展在幕后使用了大量反射。再加上如何路由,模型绑定,验证,EF操作。。。都是通过反射处理的,我想知道这对性能有多大的影响 我想知道MVC框架在幕后做了什么来解决在如此大规模的情况下使用反射的影响 我肯定它一定在做某种缓存,但知道它到底在做什么将是一种很好的学习体验,并保证我们不会为了提高生产率而牺牲巨大的性能。正如marc_s在评论中所说,使用反射并不一定是一件坏事。我负责MVC的许多性能调查(

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

我想知道MVC框架在幕后做了什么来解决在如此大规模的情况下使用反射的影响


我肯定它一定在做某种缓存,但知道它到底在做什么将是一种很好的学习体验,并保证我们不会为了提高生产率而牺牲巨大的性能。

正如marc_s在评论中所说,使用反射并不一定是一件坏事。我负责MVC的许多性能调查(甚至我自己也写过),而现实世界中应用程序中最大的性能问题是数据库访问。相比之下,其他一切都相形见绌

但是我们会尽可能地保持核心框架的精简,因此我们会在适当的地方进行缓存。这包括视图文件查找、模型lambda表达式以及更多内容。了解这一点最简单的方法可能是查看源代码并找到我们使用
字典
内存缓存
、或
HttpContext.Cache
的地方

另一种方法是在探查器下实际运行Mvc应用程序,但这是一个更高级的主题(尽管如果您搜索它,您会得到一些很好的点击)

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


下面是Steven Smith关于调整MVC应用程序性能的精彩视频:

虽然我不是专家,但我认为大量使用了。使用反射并不一定意味着性能差-请看这段精彩视频,了解性能相关的注意事项。反射比早期绑定的方法调用慢,但是,如果使用得当并缓存,反射的速度不会慢到足以使整个应用程序在使用得当时明显变慢。谢谢您的回答。这听起来很有保证,视频也很棒,从一开始就触及了表演的各个方面。