asp.net - 如何使 AppDomain 中的 ASP.NET 程序集保持事件状态?

标签 asp.net iis assemblies appdomain application-pool

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

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

我正在寻找一种解决方案,使我能够将程序集持久加载到内存中,从而覆盖程序集的 volatile ,从而实现内存驻留。

或者任何其他可以让我的用户愉快地使用该应用程序来解决上述问题的解决方案。

最佳答案

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

IIS 7 中,转到“连接” Pane 并找到“应用程序池”,然后为托管应用程序的池选择“高级设置”。找到“空闲超时”属性并将其设置为“0”(这将禁用它)。

默认为 20 分钟不活动。通过取消选中该框,一旦您的 AppDomainworker process 加载,它永远不会死(除非你杀死进程或当然)。默认情况下,IIS 将 recycle the process当它达到某种限制(例如内存上限)时,它也会启动一个新请求并“逐步过渡”所有传入请求,直到旧请求未被使用,以最大程度地减少中断。

我还编写了一个小型 C# 类,它将 keep your ASP.NET application alive ( alternate archived version ) 正常情况下。由于它在应用程序内运行,显然它不能阻止 IIS 或其他任何东西显式终止进程,但它会使应用程序保持“热”状态,例如该应用程序永远不会闲置足够长的时间,以致 IIS 决定将其关闭。

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

关于asp.net - 如何使 AppDomain 中的 ASP.NET 程序集保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/838318/

相关文章:

iis - 间歇性的 ColdFusion 404 错误页面,有时显示连接重置/中断,有时显示错误页面

.net - 如果代码发生更改,如何自动增加程序集的版本?

c# - 未检测到复选框 == true

javascript - 如何在服务器端禁用/忽略富链接预览

c# - 如何在 ExtJS 中创建动态数组变量名

refactoring - 重构产生了一个库。复试?

.net - 如何通过 f# 使用 NuGet 包和命名空间

asp.net - NewRelic - 如何忽略 Web 应用程序的一部分

java - 使用tomcat服务器在局域网上托管我的网站

asp.net - 如何使 .svc 文件写入 asp.net Trace.axd