2009-04-24 122 views

回答

9

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

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

2

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

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

除非您需要动态加载&卸载组件,它们并不值得担心。

+1

用于加载类型检测组件,如插件模型,对他们来说非常有用。所有这一切都是一个额外的启动时间。 – 2009-04-24 17:58:47

+0

同意,但只有在某些时候要卸载它们,否则没有任何区别。 此外,对于mot业务应用程序,我不希望他们是必需的。 – Steven 2009-04-24 18:05:21

0

当你必须有一个单例的多个实例时,AppDomains很有用。例如,您有一个程序集为某些设备实现通信协议,此程序集使用单例。如果你想实例化这个类的多个实例(与多个设备交谈),并且你希望这些实例不会互相干扰,那么AppDomain对于这个目的是完美的。

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

相关问题