我已经保管了一份有着奇怪问题的5年申请。应用程序池被回收后,第一个访问者必须承受通常从6到10秒的启动惩罚,但可能多达120秒。
应用程序本身是该公司许多年轻开发人员的学习平台。随着时间的推移,有一天它变成了完整的产品,给顾客带来了真正的痛苦。
这是MiniProfiler的重要部分结果,以证明它:
duration with children from start
http://myapp_test_server/app/Dashboard.aspx 2.1 8390.3 +0.3
Begin request 6921.6 8388.2 +2.4
Session started 405.2 1466.6 +6924.0
Application_BeginRequest事件处理程序为空。 Session_Start也是如此。
应用程序web.config有这个设置,它什么都不做:
<compilation defaultLanguage="c#" batch="false" optimizeCompilations="true" debug="false" />
我也尝试了所有3种参数的各种设置,但无济于事。
在应用程序池回收之后使用aspnet_compiler来编译JITted代码时,唯一能够减少几秒钟惩罚的事情。尽管如此,它并没有消除这个问题。
任何想法为什么需要很长时间才开始申请?