gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:05:23 24 4
gpt4 key购买 nike

我必须调用一些写得不好的第 3 方 COM 组件,这些组件存在内存泄漏并在长时间运行的进程中使用单线程单元 [STA]。

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

可以使用 AppDomain 代替吗?如果适当标记,AppDomain 线程是否为 STA 线程?它有自己的 COM 对象内存吗?卸载 AppDomain 是否等同于终止进程?

最佳答案

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

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

即使仅针对托管代码,AppDomain 也不提供可靠的沙盒解决方案。例如。如果加载的代码产生任何线程,这些线程将在出现未处理的异常时关闭整个进程。这个问题有更多信息:.NET - What's the best way to implement a "catch all exceptions handler" .

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

关于c# - AppDomain 是否等同于 .NET 代码的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1253228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com