重新启动App Domain是否足以清除OutOfMemoryException的内存?

时间:2014-01-20 22:40:05

标签: c# asp.net

enter image description here

关于如何回收App Pool并重新启动App Domain,有很多问题。它们与我的情景略有不同。

我在应用程序池中只有App Domain。如果抛出OutOfMemoryException,我正在尝试使用以下代码自动重启App Domain。

HttpRuntime.UnloadAppDomain(); 

问题:

According to my understanding of this SO anwser,我在应用程序池中只有一个应用程序域。因此,清除App Domain应该与清除App Pool 相同,因为我只需要清除一个内存区域

或者我仍然需要清除像this这样的应用池吗?

2 个答案:

答案 0 :(得分:2)

如果你因管理而造成的OOM泄漏" (忘记引用来自各种缓存/静态集合的托管对象)比重用AppDomain可能会清除问题。

如果你的OOM是由原生分配/加载的DLL碎片造成32位地址空间造成的,那么它不太可能被AppDomain循环修复。

事实上,从长远来看,你需要根本导致问题,在短期内IISreset可能更可靠。

答案 1 :(得分:1)

“回收”应用程序池导致与应用程序域重置相同的事情,只是应用程序池重新启动会关闭一个域并启动另一个域。因此,结果将是正在运行的应用程序域将不接受任何新请求,但将完成它接受的所有请求。新流程和应用域将启动并接受任何新请求。最终用户不应该注意到任何中断。将其与IIS重置进行比较,以有效终止进程和其中包含的所有应用程序域,即暴力破解。

但OutOfMemory例外是一个更大问题的症状。我猜你知道这不是一个解决方案。