Performance 调试慢速剃须刀视图

Performance 调试慢速剃须刀视图,performance,asp.net-mvc-4,razor,Performance,Asp.net Mvc 4,Razor,我有ASP MVC4 web应用程序。 其中一个动作返回得非常慢。我使用MiniProfiler来分析应用程序 我们处理动作本身的持续时间,现在是14毫秒,问题是在请求本身的步骤上仍然有大约1.5秒的时间,而控制器上没有动作的时间(请参见附图) 如您所见,第一行持续时间(1262.3)是不带子项的持续时间。 据我所知,这是剃须刀引擎撕裂的时间。 重要的是要注意持续的缓慢,这不仅仅是第一个请求。它从不低于800毫秒,有时甚至高达2秒 如何分析渲染本身? 视图非常复杂,其中包含多个局部视图。看起来

我有ASP MVC4 web应用程序。 其中一个动作返回得非常慢。我使用MiniProfiler来分析应用程序

我们处理动作本身的持续时间,现在是14毫秒,问题是在请求本身的步骤上仍然有大约1.5秒的时间,而控制器上没有动作的时间(请参见附图)

如您所见,第一行持续时间(1262.3)是不带子项的持续时间。 据我所知,这是剃须刀引擎撕裂的时间。 重要的是要注意持续的缓慢,这不仅仅是第一个请求。它从不低于800毫秒,有时甚至高达2秒

如何分析渲染本身?
视图非常复杂,其中包含多个局部视图。

看起来您的视图中正在执行SQL查询。如果您正在使用某种ORM框架,例如EntityFramework,它正在惰性地加载实体,并且一旦您接触到实体的属性(在视图中发生),它们就会急切地从数据库中获取,则可能会发生这种情况。我建议您使用视图模型,并急切地在控制器操作中加载所有内容,而不是等待这种情况发生在您的视图中。

看看《一瞥》是否能为您提供更多的洞察力

如果计算路线,渲染视图可能需要很长时间。如果删除所有ActionLink和类似的Html帮助程序,请检查渲染所需的时间。

我已经完成了

这有助于我查看哪个视图或局部视图的渲染时间最长。
它没有解释原因,例如由于使用ActionLink或长时间计算。

尝试切换到释放模式。在发布模式下,将缓存视图位置。如果您包含了数以百万计的局部视图,这可能是原因。“在发布模式下,视图位置被缓存。”这是在某个地方记录的,还是您通过例如NET Reflector发现的?这就是我想了解的幕后细节。@JasonEvans,我不知道这是否有文档记录。我从不看文档,因为我不信任它。我通过阅读ASP.NETMVC的源代码发现了这一点。因为当我们运行我们的应用程序时,执行的是源代码,而不是文档:-)我们有大量的ActionLink,我会尝试一下。因此,请确保您不是为调试而编译(例如在web.config中),如果您处于调试模式,MVC不会执行任何视图查找缓存(请参阅)-我的一个页面从18秒的渲染时间变为1秒,这是一个巨大的差异