如何使AppDomain中的ASP.NET程序集保持活动状态?

thi*_*eek 50 asp.net iis assemblies appdomain application-pool

场景:我使用Web部署项目部署了一个n层企业ASP.NET应用程序.所有层都生成ASP.NET应用程序使用的独立程序集.

问题:当我运行应用程序时.部署后第一次将相关程序集加载到内存中需要花费大量时间.但一旦加载其照明快速应用程序.如果没有用户访问该应用程序,IIS将从内存中卸载程序集,当用户尝试在以后的实例上访问该应用程序时,它会再次加载所有程序集,并且需要花费相同的时间来加载它这是第一次这样做.

我正在寻找一种解决方案,使我能够将我的程序集加载到内存中,持续覆盖程序集的易变性,以实现内存驻留.

或任何其他解决方案,让我的用户愉快地使用该应用程序解决上述问题.

Rex*_*x M 72

IIS 6中,转到"应用程序池"部分,然后右键单击托管相关ASP.NET应用程序的池上的"属性".转到"性能"选项卡,取消选中"空闲后关闭工作进程:"

IIS 7中,转到"连接"窗格并找到"应用程序池",然后为承载应用程序的池选择"高级设置".找到"空闲超时"属性并将其设置为"0"(这将禁用它).

默认值为20分钟不活动.通过取消选中该框,一旦您的AppDomain工作进程加载,它将永远不会死亡(除非您终止进程或其他事情).默认情况下,IIS将回收的过程中,当它达到一定的限制,比如内存上限,但直到旧的未使用它还将启动"过相"的所有传入的请求一个新的和,以尽量减少干扰.

我还编写了一个小的c#类,它可以在正常情况下保持ASP.NET应用程序的存活(备用存档版本).由于它的应用程序内运行,这显然不能明确地杀死进程停止IIS或其他任何东西,但它会保持应用程序的"热",例如应用程序将永远不会进入空闲状态足够长的时间IIS来决定关闭它.

如果您无法直接控制IIS配置(例如,共享主机),最好的办法是在一个单独的系统上运行一个小应用程序 - 比如一个永远在线的工作站 - 每隔x分钟就可以访问您的站点超时的应用程序池.没什么好看的 - 控制台应用程序中的简单WebRequest和while()循环就可以了.

  • @RexM,404链接到小C#类. (2认同)