最小化asp.net的启动时间

oɔɯ*_*ɯǝɹ 10 .net asp.net iis performance startup

我在IIS中运行多个Web服务(WCF).当服务温暖(加载)时,典型的请求大约需要0.5秒才能完成.但是,当应用程序不热(冷启动)时,在服务启动并运行之前,第一次命中需要大约20秒.发生应用程序池循环时会发生同样的情况.

我希望减少此Web服务的冷启动时间.我已经执行的一些操作是:

  • 配置应用程序池,使其在20分钟后空闲时间不再循环(以便应用程序保持温暖).这可以最大限度地减少冷启动的发生,但不会使冷启动更快.应用程序池回收现在有限,但确实发生了.

  • 修改了machine.config,

像这样:

<runtime>
    <!-- see http://msdn.microsoft.com/en-us/library/bb629393(v=vs.90).aspx -->
    <generatePublisherEvidence enabled="false"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)

这将启动时间从20秒减少到大约10秒.

  • 我试过NGEN用来预编译程序集,

像这样

for %d in (*.dll) do ngen install %d
Run Code Online (Sandbox Code Playgroud)

这不会减少启动时间(只会增加部署的复杂性).

我真的希望进一步缩短冷启动时间.我有什么选择呢?

(旁注:找出启动时间花在哪里的最佳方法是什么?我如何监控正在发生的事情?)

oɔɯ*_*ɯǝɹ 2

更新

我已经用 做了一些进一步的测试procmon。启动时间似乎不是单一原因造成的,而是一大堆小时间片(进程启动、加载、网络运行时、读取配置、加载程序集等)加起来就达到了总时间。