我在我的应用程序池中设置了startMode =“AlwaysRunning”属性,并在IIS配置中为我的应用程序设置了serviceAutoStartEnabled =“true”属性。我甚至设置了serviceAutoStartProvider,可以看到正在执行“预热”代码。我也可以看到w3wp进程在iisreset之后自动启动。但是,对我的ASP.NET MVC应用程序的第一个请求与没有自动启动一样慢。如果没有探查器,是否有任何缺失或任何方法可以轻松调试?
此功能是否会影响首次请求性能?考虑到工作进程已准备就绪,.NET appdomain甚至所有.NET程序集都已加载,实际上第一个请求的大部分工作要做什么?
答案 0 :(得分:2)
我最近一直在研究这个问题。
据我所知,autoStart功能将导致您的IIS工作线程(默认情况下,只是池的线程)在第一次请求之前进行JIT编译。
但是,编译的内容似乎只是大量的程序集和依赖项,但不一定是任何方法。
当第一个请求发生时,你编写的方法第一次被调用,JITer对那些尚未编译的方法执行最终编译。
autoStart的好处似乎是让.Net可以预先完成90%的工作,但是当第一个请求发生时,最后10%仍然需要支付,而那些尚未访问的方法会被运行第一次。