2011-08-11 98 views
4

我在我的应用程序池上设置了startMode =“AlwaysRunning”属性,在我的应用程序中设置了serviceAutoStartEnabled =“true”属性。我甚至设置了serviceAutoStartProvider,并可以看到正在执行“预热”代码。我也可以看到w3wp进程在iisreset之后自动启动。不过,对我的ASP.NET MVC应用程序的第一个请求与没有自动启动一样慢。有没有我失踪的点或任何方式轻松调试这个没有探查器?启用IIS 7.5自动启动后,第一个请求仍然很慢

此功能是否会影响第一次请求性能?考虑到工作进程已经准备就绪,.NET appdomain甚至所有的.NET程序集都已经被加载,实际上大量的工作要做在第一个请求上呢?

回答

2

我最近一直在关注这个。

据我所知,autoStart功能会导致您的IIS工作线程(默认情况下,只是池的一个)在第一个请求之前进行JIT编译。

但是,什么编译似乎只是程序集和依赖关系的一部分,但不一定是任何方法。

当第一个请求发生时,并且您编写的方法第一次被调用时,JITer将对那些尚未编译的方法执行最终编译。

autoStart的好处似乎是它让.NE​​T能够预先完成90%的工作,但是最后的10%在第一个请求发生时仍然支付,而那些尚未被访问的方法得到运行首次。

+1

问题是我注意到autoStart在服务器第一次请求所花费的时间方面0%的好处。 – Konstantin

+0

你能检查它是否正常工作?在对配置文件进行更改或回收应用程序池之后,应用程序会在JIT的应用程序中看到IIS秒杀CPU使用几秒钟。 – Andrew