随机减慢页面加载速度

时间:2012-12-05 18:25:44

标签: .net sql-server asp.net-mvc-3 performance

要解释问题究竟是什么并不容易,但我会尝试; - )。

以下是一些数据:

  • 带有IIS7的Microsoft服务器(不是RC2)
  • 3GB Ram
  • 此服务器上只有此应用程序
  • SQL 2008 Express
  • 存储库模式
  • SimpleInjector
  • MVCSitemapProvider

现在好了。它不是启动,因为该站点在2秒内加载。应用程序池回收后。启动后,页面加载时间在200毫秒或更短(或更多),但有时(我不能说什么时候,因为它是随机的,而不是在回收后),它们需要长达2分钟或更长时间。

我试着一睹这个问题。它显示如下:

  • ASP.NET开始请求:121456ms(这是随机的)
  • 过滤:2ms
  • 控制器:26ms
  • 观看次数:298ms
  • ASP.NET结束请求:0ms

这就像请求堆叠,我不知道。

修改

所以我删除了整个MVC SiteMap提供程序,但幻像性能问题仍然存在。

然后我检查了IIS配置并注意到AppPool是一个NetworkService而不是ApplicationPoolIdentity(其他MVC解决方案在ApplicationPoolIdentity上运行),现在它似乎比以前更快(页面加载< 50ms)!如果问题仍然存在,我将写在这个帖子中。

1 个答案:

答案 0 :(得分:1)

我在一个MVC3项目上遇到了一个非常类似的问题,它的架构与你上面描述的有些相似。我们的问题与MVCSitemapProvider有关。我会找到关于具体问题的说明,但我们发现如果我们禁用SiteMap创建菜单,就像测试一样,一切都闪电般快,那么当我们重新开启它时会变慢。

我建议将其作为调试问题的下一步。

好的,我和我的一位同事谈过这个项目,我现在回想起来。有几个问题。首先,MVC Sitemap Provider吞下它的所有异常;这并不完全是坏事,但确实使得解决问题变得困难。我们发现两种不同的情况导致了两个略有不同的问题,这两种情况都导致了减速。首先,我假设在您的_Layout.cshtml或任何布局文件中,您包括调用提供程序以生成菜单以及可能还有面包屑。

  1. 如果您有一个尚未在站点地图中定义的控制器操作,那么每次进入该页面时,生成菜单和面包屑的尝试都会在异常后引发异常并且您永远不会看到它们;这是非常昂贵的,并且会降低页面的速度。
  2. 如果您的站点地图中定义了一个节点,该节点指向拼写错误或只是不存在的控制器操作,则每次站点地图尝试呈现菜单和/或面包屑时,它都会抛出并吞下许多异常,对于每一页。
  3. 由于我们对站点地图有这两个问题和其他问题,我真的建议您搜索站点地图文件并确保您在其中表示所有控制器操作,并且没有错误定义任何节点。如果您不能完全确定,您可能甚至想在站点地图代码中放置一些断点并逐步执行它以查看它是否为您抛出异常,然后从那里向后追踪。