1

解释真正的问题并不容易,但我尝试;-)。

这里有一些数据:

  • 带有 IIS7(不是 RC2)的 Microsoft 服务器
  • 3GB 内存
  • 此服务器上只有此应用程序
  • SQL 2008 速成版
  • 存储库模式
  • 简单注射器
  • MVC站点地​​图提供者

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

我试图瞥见问题。它显示如下:

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

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

编辑:

所以我已经删除了整个 MVC SiteMap Provider,但幻影性能问题仍然存在。

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

4

1 回答 1

1

我在一个 MVC3 项目上遇到了一个非常相似的问题,它的架构与你上面描述的有点相似。我们的问题原来与 MVSitemapProvider 相关。我会寻找关于具体问题的注释,但我们发现如果我们禁用创建菜单的站点地图,就像测试一样,一切都快如闪电,然后当我们重新打开它时它会变慢。

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

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

  1. 如果您有一个未在站点地图中定义的控制器操作,那么无论何时您转到该页面,生成菜单和面包屑的尝试都会在异常之后引发异常,并且您永远看不到它们;这是非常昂贵的,并且会减慢该页面的速度。
  2. 如果您在站点地图中定义了一个节点,该节点指向拼写错误或根本不存在的控制器操作,则每次站点地图尝试呈现菜单和/或面包屑时,它都会抛出并吞下许多异常,对于每个单页。

由于我们在站点地图上遇到的这两个问题和其他问题,我真的建议您仔细检查您的站点地图文件并确保您在其中代表所有控制器操作,并且您没有错误定义任何节点。如果您不能完全确定,您甚至可能希望在站点地图代码中放置一些断点并逐步检查它是否为您抛出异常,然后从那里向后追溯。

于 2012-12-05T18:49:30.343 回答