模拟AppDomain回收

时间:2012-07-10 15:44:02

标签: c# asp.net

我阅读了Phil Haack关于使用IRegisteredObject接口的文章,以确保后台线程在AppDomain关闭时完成,并将其实现到我的代码中。但是,我不完全确定如何模拟AppDomain崩溃以进行测试。如何模拟AppDomain崩溃?

1 个答案:

答案 0 :(得分:9)

让AppDomain关闭的最简单方法是让父进程停止。在ASP.NET中,您可以通过回收或停止运行代码的应用程序池来完成此操作。我们有一些代码可以确保日志记录被刷新,这就是我过去测试它的方式。

至于完全崩溃,我不确定你怎么能这样做...托管环境捕获异常,因此可能不可行。您可以尝试Environment.ExitEnvironment.FailFast这会强制父进程立即退出吗?

编辑: 我在这里忘记了最简单的选项...只需保存Web.config - 这将触发AppDomain回收!

有些候补......

如果您正在使用IIS运行,则可以从IIS管理器中回收应用程序池并执行以下步骤...

  1. 在“网站”下找到您的应用。它可能位于其中一个网站之下 - 可能是一个虚拟目录。
  2. 右键单击该应用程序,然后选择“管理应用程序”,然后选择“高级设置”。
  3. 记下“应用程序池”。
  4. 在“应用程序池”下找到应用程序池。
  5. 右键单击它并点击“回收”。
  6. 对于IIS Express,您只需右键单击托盘中的图标,然后在UI中就可以停止应用程序。

    对于Visual Studio Development Server(Cassini),您还可以使用托盘来停止应用程序。