我什么时候会使用AppDomain?

时间:2009-04-24 17:52:20

标签: .net-2.0 appdomain

我对反思很新,我很想知道我会用什么(第二个)AppDomain?在商业应用程序中会有什么实际应用?

3 个答案:

答案 0 :(得分:9)

有很多用途。辅助AppDomain可以提供一定程度的隔离,类似于操作系统提供进程的隔离。

我用它的一个实际用途是动态加载“插件”DLL。我想支持在主可执行文件启动时扫描DLL目录,加载它们并检查它们的类型以查看是否有任何实现特定接口(即插件的合同)。在不创建辅助AppDomain的情况下,您无法卸载可能没有任何实现所寻求接口的类型的DLL /程序集。您可以创建辅助AppDomain,在那里加载程序集,然后检查类型,而不是在进程中携带额外的程序集和类型等。当你完成后,你可以摆脱辅助AppDomain,从而摆脱你的类型。

答案 1 :(得分:2)

99%的时间我会避免使用其他AppDomains。它们本质上是分开的过程。您必须将数据从一个域封送到另一个域,这会增加复杂性和性能问题。

人们已经尝试使用AppDomains来解决在将程序集加载到AppDomain后无法卸载程序集的问题。因此,您可以创建第二个AppDomain,您可以在其中加载动态程序集,然后卸载完整的AppDomain以释放与程序集关联的内存。

除非您需要动态加载&卸载装配他们并不值得担心。

答案 2 :(得分:0)

当您必须拥有单个实例时,AppDomains非常有用。例如,您有一个程序集,它实现了某些设备的通信协议,并且此程序集使用单例。如果您想要实例化此类的多个实例(与多个设备通信)并且您希望实例不会相互干扰,那么AppDomains就可以完美地实现此目的。

但是,它确实使编程变得更加困难,因为你必须做更多的工作来跨AppDomain边界进行通信。