代码之家  ›  专栏  ›  技术社区  ›  this. __curious_geek

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

  •  50
  • this. __curious_geek  · 技术社区  · 15 年前

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

    问题: 当我运行应用程序时。部署后第一次在内存中加载依赖程序集需要很多时间。但一旦加载了它的快速照明应用程序。如果没有用户访问该应用程序,则IIS将从内存中卸载程序集,当用户在以后的实例中尝试访问该应用程序时,它将再次加载所有程序集,所需的加载时间与第一次相同。

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

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

    3 回复  |  直到 12 年前
        1
  •  72
  •   Oppositional    12 年前

    IIS 6 ,转到“应用程序池”部分,然后右键单击托管有问题的ASP.NET应用程序的池上的“属性”。转到“性能”选项卡,取消选中“空闲以下时间后关闭工作进程:”。

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

    默认为20分钟不活动。取消选中该框后, AppDomain 由加载 worker process 它永远不会死(除非你扼杀了这个过程或者其他的东西)。默认情况下,IIS将 recycle the process 当它达到某个限制时,例如内存上限,但它也会启动一个新的请求,并“逐步”处理所有传入的请求,直到旧的请求未被使用为止,从而将中断最小化。

    我还写了一个小的C班 keep your ASP.NET application alive ( alternate archived version )在正常情况下。由于它在应用程序中运行,很明显它无法阻止IIS或其他任何东西明确地终止进程,但它将保持应用程序“热”,例如,应用程序将永远不会空闲足够长的时间,以便IIS决定关闭它。

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

        2
  •  3
  •   Gusman    13 年前

    ASP.NET的一个优点是可以创建对象的静态(共享)实例。

    为了避免外部进程的必要性,您可以在global.asax中创建一个静态计时器(每个示例),它用一个简单的webrequest来调用域中的一个页面。通过这种方式,该站点将一直保持活动状态,直到手动重置池为止。

        3
  •  0
  •   Namoguy    14 年前

    我写了一个小的C控制台应用程序,通过Windows任务调度器每10分钟保持4个站点的活动状态。生活再次美好。我们不会在凌晨2点到5点运行这个应用程序,只是为了让服务可以清理内存,如果这很重要的话。对于我们的网站来说,在那些时间里很少有人打开。