MVC OnResultExecuting 性能问题
Posted
技术标签:
【中文标题】MVC OnResultExecuting 性能问题【英文标题】:MVC OnResultExecuting performance issues 【发布时间】:2012-01-24 11:47:14 【问题描述】:我目前正在使用非常棒的 MVC-mini-profiler 调查我们的 Web 应用程序(MVC2、S#arp 架构、流利的 nHibernate)的性能问题。如本文Getting more "granularity" from the MVC Mini Profiler 中所述,我正在对要调查的操作或控制器使用属性。
我发现在 OnResultExecuting 和 onResultExecuted 之间花费了很多时间,我认为这一定是渲染视图,所以如果从那里调用复杂的逻辑就会出现问题,但我已经输入了一个数字的分析器调用围绕部分视图,包括一个围绕整个母版页,但仍然有很多时间(在某些情况下大约 4-5 秒)是完全下落不明的。
除了渲染视图之外,我真的不明白 OnResultExecuting 之后的步骤中发生了什么,所以甚至不知道在哪里寻找性能问题。
任何指针将不胜感激。
【问题讨论】:
【参考方案1】:您是否正在创建视图模型以传递给您的视图进行渲染?如果视图模型有一些东西的集合,并且该集合是使用 NHibernate 上的 Linq 查询填充的,那么 Linq 查询可能正在作为渲染视图的一部分执行。这意味着数据库访问可以占用 4-5 秒中的一些时间。通常,创建视图模型的任何代码都应确保该视图模型中的所有集合都已完全填充,而不是尚未枚举的 IQueryables。
这听起来有可能吗?如果是这样,使用 NHProf 可能有助于确定它。
【讨论】:
谢谢,我确实使用 NHProf 来减少我们正在执行的大量数据库调用,这似乎确实解决了性能问题,尤其是在本节中,但我对此并不明智为什么它发生在页面周期的这一部分,查询延迟加载的对象/IQueryables 会解释这一点,所以谢谢。【参考方案2】:我最好的猜测是它提交了 UnitOfWork(NHibernate 中的 ISession)。这可能是相当耗时的操作。
【讨论】:
以上是关于MVC OnResultExecuting 性能问题的主要内容,如果未能解决你的问题,请参考以下文章
将 X-Frame-Options 标头添加到 MVC 4 应用程序中的所有页面