最小化asp.net的启动时间

时间:2011-04-05 16:40:11

标签: .net asp.net performance iis 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>

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

  • 我尝试使用NGEN预编译程序集
像这样

for %d in (*.dll) do ngen install %d

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

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

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

2 个答案:

答案 0 :(得分:2)

更新

我已经使用procmon进行了一些进一步的测试。似乎没有一个启动时间的原因,它是很多小时间点(过程启动,加载,网络运行时,读取配置,加载程序集等等),总计时间总和。

答案 1 :(得分:1)

我对this article中找到的策略运气不错。它使应用程序保持活动状态,这样一旦它运行,你就不会有任何冷启动(除非IIS或机器实际上是故意重启或由于重大错误)。无论任何活动,该应用程序都会保持活力。

这篇文章是关于每隔一段时间安排一些事情的,但如果你的唯一目标是让应用程序保持活跃,你可以跳过这部分。