AppDomain是否等同于.NET代码的进程?

Roh*_*hit 13 .net c# appdomain

我必须调用一些写得不好的第三方COM组件,这些组件有内存泄漏,并且在长时间运行的过程中使用Single Threaded Apartment [STA].

我知道单独的进程将是实现它的好方法,我可以偶尔从长时间运行的进程重新启动它.

可以改用AppDomain吗?如果适当标记,AppDomain线程是否为STA线程?它是否有自己的COM对象内存?卸载AppDomain是否相当于杀死进程?

Bri*_*sen 23

AppDomain不提供与进程相同程度的隔离.事实上,如果您担心第三方组件状况不佳,则存在风险,它会占用您的.NET应用程序.

如果在卸载时执行非托管代码,则无法卸载AppDomain,因此您可能很难在AppDomain中控制第三方代码.请参阅http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx

即使仅对托管代码,AppDomain也不提供强大的沙盒解决方案.例如,如果加载的代码产生任何线程,则这些线程将在未处理的异常情况下取消整个过程.这个问题有更多信息:.NET - 实现"捕获所有异常处理程序"的最佳方法是什么.

据我所知,在.NET应用程序中托管代码的最佳选择是实现自己的CLR主机进程,如IIS和SQL Server.