【问题标题】:Why is pre-compiling my ASP .NET MVC project not improving my first time access speed?为什么预编译我的 ASP .NET MVC 项目并没有提高我的首次访问速度?
【发布时间】:2012-12-14 04:29:34
【问题描述】:

我尝试了两件事。一种是使用 aspnet_compiler 预编译我的 ASP.NET MVC 3 项目,另一种是在项目中使用 RazorGenerator 以允许编译视图。使用这两种方法,我仍然看到我网站中的页面必须在第一次访问时进行编译。我看到 csc.exe 在第一次访问时在服务器上运行,并且下次不会发生。为什么这些预编译步骤不能阻止这种情况,从而让我在第一次访问时更快?

【问题讨论】:

标签: asp.net-mvc-3 performance jit razorgenerator


【解决方案1】:

预编译应用程序不会改善第一个请求的启动时间,因为当第一个请求到达时仍有许多事情需要发生:

  • Application_Start 方法执行
  • 为后续请求检索和缓存控制器和视图位置
  • ...

如果您想在 Web 服务器启动时将应用程序预加载到内存中,可以使用 IIS 7.5 和 ASP.NET 4.0 的 AutoStart feature。这样,应用程序将很热并等待第一个请求。

【讨论】:

  • 但是如果您想部署一个实时网站并尽量减少初始等待时间怎么办?在 IIS 中启动网站后,此功能是否会立即生效?
  • 是的,它会起作用,因为 IIS 会在站点部署后立即自动启动,而不是在第一个请求到达时立即自动启动,从而避免第一个请求缓慢。
  • 它必须做其他事情是有道理的,这可能需要时间。我特别想知道为什么调用 csc.exe 而不仅仅是第一个请求,每个页面的第一个请求。我不应该能够预编译它试图编译的任何东西吗?特别是因为它似乎发生在每个视图中。使用预编译器的性能优势似乎为零。
  • 预编译 ASP.NET 应用程序的好处是,与未预编译相比,它的加载速度更快。在非预编译的 ASP.NET 应用程序中,您还将所有 C# 源文件部署到 Web 服务器,并且需要在第一次请求时动态编译它们,这可能会更慢。当您预编译您的应用程序时,仅需要在第一次请求时动态编译视图。这就是视图引擎在 ASP.NET 中的工作方式,您对此无能为力。
猜你喜欢
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 2010-09-14
  • 1970-01-01
相关资源
最近更新 更多