我大致了解AppDomain是什么,但是我并不完全理解AppDomain的用途。
我参与了一个基于大型服务器的C# / C++应用程序,我想知道如何使用AppDomains可以提高稳定性/安全性/性能。
特别是:
发布于 2010-02-05 12:40:18
AppDomain的基本用例是在托管第三方代码的环境中,因此不仅需要动态加载程序集,还需要卸载它们。
无法单独卸载程序集。因此,您必须创建一个单独的AppDomain来存放可能需要卸载的任何内容。然后,您可以在必要时破坏和重建整个AppDomain。
顺便说一句,CLR的任何特性都无法保护导致堆损坏的本机代码。最终,CLR是以本地方式实现的,并且共享相同的地址空间。这样,过程中的本机代码就可以在CLR的内部到处乱写!隔离行为恶劣(即大多数)本机代码的唯一方法是在OS级别上进行实际的进程隔离。启动多个.exe进程,并让它们通过某些IPC机制进行通信。
发布于 2010-02-05 13:07:34
我强烈推荐杰弗里·里希特的通过C#实现CLR。特别是,第21章详细介绍了AppDomains的用途和用途。
在回答你的观点/问题时:
发布于 2010-02-05 12:39:53
实际上,一个AppDomain
中的关键失败不能影响其他的,这是不正确的。如果发生了不好的事情,最好的办法就是拆掉这个过程。有几个例子,但老实说,我还没有记住它们--我只是在心里记了一句:“坏事情=拆卸过程(检查)”
AppDomain
的好处
AppDomain
之间的通信相对便宜。IMO这是我唯一乐意使用远程处理的时候(尽管您仍然需要非常小心地处理边界上的对象,以避免它们之间的引用流血,导致“融合”将额外的dll加载到主AppDomain
中,导致泄漏)--这也很容易--只有CreateInstanceAndUnwrap
(或者是CreateInstanceFromAndUnwrap
?)。AppDomain
工作的另一个exe,而且设置任何您需要的逗号要容易得多。https://stackoverflow.com/questions/2207053
复制相似问题