关于C#:ASP.Net上的预编译和启动时间

关于C#:ASP.Net上的预编译和启动时间

Precompilation and startup times on ASP.Net

我正在ASP.Net 2.0中开发一个(相对较小的)网站。 在交付可执行文件之前,我还使用nAnt对项目进行一些简单的调整。 在当前状态下,使用以下方式对网站进行"预编译":

aspnet_compiler.exe -nologo -v ${Appname} -u ${target}

我注意到,在重新启动IIS池之后(在空闲关闭或回收之后),该应用程序最多需要20秒才能恢复联机(并达到Application_start)。

当我直接在Visual Studio中调试时(启动需要2秒钟),我没有相同的问题,所以我想知道aspnet_compiler是否真的是一个好主意。

我在MSDN上找不到很多。 您如何编译您的网站以进行生产?


为了获得最高的响应速度,请勿关闭您的应用程序。

第一种方法是确保它非常受欢迎,以便总有人在使用它。

或者,从其他地方获取一个很小的保持活动页面作为计划的活动,可以使您的网站保持"热"状态。


确保:

  • 您使用的是Web应用程序项目而不是Web站点项目,这将为您的代码提供预编译的二进制代码
  • 您已关闭了web.config文件中的调试代码生成功能-我想这是否与使用aspnet_compiler时不同,可能会重新编译代码
  • 如果您尝试过这些,则可以尝试在程序集上运行ngen从而节省JIT时间?


    如果您的网站被编译为可更新的,您将在虚拟目录中看到一堆.ASPX文件。这些必须在启动时进行编译。这样一来,您就可以进入并更改Web UI本身。这是网站和Web应用程序的默认设置。


    关键是要确保IIS应用程序池永远不会关闭。这是实际托管代码的地方。将"空闲超时"(在"高级设置"下)设置得很高,例如1440分钟(24小时),以确保只要有人每天访问您的网站,它就不会关闭。

    无论何时部署新代码,或者在没有任何流量的情况下超过了此空闲超时时间,您仍将拥有JIT时间。

    配置IIS 7.x空闲超时


    确保在web.config 中进行了设置。就我而言,我还有一个批处理文件,该文件在向用户发送请求之前发出对所有主要页面的Get请求(页面加载模拟)。


    @西蒙:

    • 该项目是一个Web应用程序。那么网站的启动速度就会变慢(除了其他代码组织之外,我不知道它会发生什么)?
    • 我检查了一下,并在调用aspnet_compiler之后编辑web.config时,我没有触摸调试值(但是,如果我不触摸web.config,我将检查网站启动速度是否较慢,只是为了使当然)

    (而且我肯定会看一下ngen的,我并不知道该工具。)


    推荐阅读