4

我在 IIS 配置中的应用程序池上设置了 startMode="AlwaysRunning" 属性,并在我的应用程序上设置了 serviceAutoStartEnabled="true" 属性。我什至设置了 serviceAutoStartProvider 并且可以看到正在执行“预热”代码。我还可以看到 w3wp 进程在 iisreset 后自动启动。尽管如此,对我的 ASP.NET MVC 应用程序的第一个请求与没有自动启动时一样慢。有什么我遗漏的地方或任何无需探查器即可轻松调试的方法吗?

预计此功能会影响第一次请求的性能吗?考虑到工作进程已准备好、.NET appdomain 甚至所有 .NET 程序集都已加载,第一个请求实际上要做的大量工作是什么?

4

1 回答 1

2

我最近一直在研究这个。

据我所知,自动启动功能将导致您的 IIS 工作线程(默认情况下,仅用于池的工作线程)在第一个请求之前进行 JIT 编译。

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

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

autoStart 的好处似乎是它可以让 .Net 预先完成 90% 的工作,但是当第一个请求发生并且那些尚未访问的方法第一次运行时,最后的 10% 仍然是付费的.

于 2012-01-01T11:20:48.997 回答