Asp.net mvc 使用Visual Studio 2012的MVC 4应用程序渲染时间

Asp.net mvc 使用Visual Studio 2012的MVC 4应用程序渲染时间,asp.net-mvc,visual-studio-2012,Asp.net Mvc,Visual Studio 2012,当我在Chrome上使用Visual Studio 2012运行我的mvc应用程序时,我的页面需要36秒才能呈现-使用mini profiler看到了这一点。当我在远程服务器上托管项目并点击服务器获取页面时,第一次点击需要36秒。但在随后的点击中,它会显著降低到1秒或更少。你有没有想过为什么会这样?在远程服务器上,当我们重新启动应用程序池时,我们看到需要36秒 所以问题是,是因为IIS将资源分配给站点而花费了这么长时间,还是我们的设置有其他问题?我们的开发时间确实受到了影响,因为我们每次调试项目

当我在Chrome上使用Visual Studio 2012运行我的mvc应用程序时,我的页面需要36秒才能呈现-使用mini profiler看到了这一点。当我在远程服务器上托管项目并点击服务器获取页面时,第一次点击需要36秒。但在随后的点击中,它会显著降低到1秒或更少。你有没有想过为什么会这样?在远程服务器上,当我们重新启动应用程序池时,我们看到需要36秒


所以问题是,是因为IIS将资源分配给站点而花费了这么长时间,还是我们的设置有其他问题?我们的开发时间确实受到了影响,因为我们每次调试项目所需的时间。构建,然后每次需要36秒来呈现我们正在调试的页面

我想到了一些可能性:

查看编译

默认情况下,在VisualStudio中处理项目时,视图是按需编译的。虽然36秒似乎是一个很长的时间来编译第一页的视图,这可能是一个促成因素。如果页面发生更改,则必须重新编译。要在执行测量时消除这一因素,可以使用文本编辑器编辑.csproj文件并更改行

<MvcBuildViews>false</MvcBuildViews>
false

true
(这通常也是一个有用的设置)

其他初始化开销

如果您在应用程序启动时进行了大量初始化(可能是从文件或数据库预加载了一些数据),则每次web服务器启动或应用程序域回收时,都必须进行初始化。在VisualStudio中,我发现web服务器可以在令人惊讶的时间重新启动。添加一些日志以查看您是否在特定的基准测试运行期间运行启动代码,并查看这会带来多少开销

实体框架

由于某些原因,实体框架在调试时运行得要慢得多。如果您通过EF进行大量数据访问,这可能会解释其中的一些差异。

当您说“运行”时,我假设您的意思是调试。调试将重建项目,然后在加载浏览器后,每次都必须完成首次加载的所有标准初始化。与服务器上的应用程序池启动时间相同(36秒)的事实似乎证明了这一点


FWIW,您只需要在每个VisualStudio会话中调试一次项目,就可以启动IIS Express。之后,您可以简单地重建项目并在测试更改后直接刷新浏览器(无需在Visual Studio中使用调试)。而且,仅当您对任何*.cs文件进行了更改时,才需要重建。Razor视图、web.config等将在下一页加载时反映其更改,而无需重新生成。这样做,您唯一失去的就是调试能力,显然已经足够了。您将只获得一个标准的死亡黄页,而不是在VisualStudio中自动跳转到令人不快的代码。但是,我发现,除非我真的需要调试,否则这种方法开发起来要快得多。

我做的第一件事就是更改MVCBuildViews=“true”,但这并没有改变任何东西。关于预加载数据,这是捆绑吗?这是automapper配置吗?捆绑不应超过几毫秒到可能几毫秒。在调试模式下(基于web.config设置,而不是VS中的构建设置),实际上并不进行捆绑,而是将捆绑中的文件原封不动地传递出去。因此,如果有什么进展的话,DEV会更快。对于预加载数据,我的意思是,也许您可以从数据库或类似的
应用程序\u Start()
中加载数据。在任何情况下,我都会测量在
应用程序\u Start()
中花费了多少时间。当我们直接将脚本放在页面上而不是在调试模式下使用捆绑功能时,我们的启动速度似乎要快得多。这个link()似乎说了同样的话,但似乎微软已经更新了这个,但我不太确定。我们没有使用rc版本。只是运行了一个秒表,从应用程序开始到应用程序结束,我发现需要338毫秒。这比它所用的36秒要小得多。
<MvcBuildViews>true</MvcBuildViews>