关于如何回收App Pool并重新启动App Domain,有很多问题。它们与我的情景略有不同。
我在应用程序池中只有App Domain。如果抛出OutOfMemoryException
,我正在尝试使用以下代码自动重启App Domain。
HttpRuntime.UnloadAppDomain();
According to my understanding of this SO anwser,我在应用程序池中只有一个应用程序域。因此,清除App Domain应该与清除App Pool 相同,因为我只需要清除一个内存区域。
或者我仍然需要清除像this这样的应用池吗?
答案 0 :(得分:2)
如果你因管理而造成的OOM泄漏" (忘记引用来自各种缓存/静态集合的托管对象)比重用AppDomain可能会清除问题。
如果你的OOM是由原生分配/加载的DLL碎片造成32位地址空间造成的,那么它不太可能被AppDomain循环修复。
事实上,从长远来看,你需要根本导致问题,在短期内IISreset可能更可靠。
答案 1 :(得分:1)
“回收”应用程序池导致与应用程序域重置相同的事情,只是应用程序池重新启动会关闭一个域并启动另一个域。因此,结果将是正在运行的应用程序域将不接受任何新请求,但将完成它接受的所有请求。新流程和应用域将启动并接受任何新请求。最终用户不应该注意到任何中断。将其与IIS重置进行比较,以有效终止进程和其中包含的所有应用程序域,即暴力破解。
但OutOfMemory例外是一个更大问题的症状。我猜你知道这不是一个解决方案。