【发布时间】:2012-07-21 08:36:16
【问题描述】:
由于在启动时发生了很多 IoC 事情,我的 Application_Start 非常慢。
我要解决的问题是,如何避免将启动时间传递给最终用户?
假设
我的应用程序托管在 AppHarbor 上,因此我无法访问 IIS。但是,即使我这样做了,我的研究是让应用程序池回收是最佳实践,因此无法避免 Application_Start 定期运行(我认为在 AppHarbor 上每 20 分钟运行一次)。
我的解决办法
最初我以为我会每隔一分钟或什么时候点击它,但这似乎太暴力了,甚至可能无法阻止用户体验启动缓慢。
我目前的解决方案是处理 Application_End 事件,然后立即点击应用程序使其再次启动,因此希望不会影响任何用户。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
您确定它们每 20 分钟回收一次吗? IIS 上的开箱即用体验是它们会在 20 分钟内没有任何活动时关闭应用程序池。当然,第一次命中会慢一些,但除非你在
Application_Start中做疯狂的事情,否则这应该不是问题。 -
嘿马丁,是的,它是每 20 分钟,根据 AppHarbor。不管你是对的,它是一个使用率非常低的网站,所以它可能没有受到足够的打击。所以有可能我可以每 15 分钟打一次它,这样它就不会睡觉了......?
-
我会调查
Application_Start。实际需要多长时间?能不能优化一下,让第一次命中有一点延迟就不是问题了? -
嘿,马丁,需要 5 到 10 秒,这都是温莎 IoC 的东西。我有点不介意,只要用户不必体验它。
-
好吧,如果不超过 5-10 秒,我不会打扰。
标签: asp.net-mvc-3 iis-7 ioc-container global-asax appharbor