8

我对反射很陌生,我想知道我会使用(第二个)AppDomain 做什么?在业务应用程序中会有什么实际应用程序?

4

3 回答 3

10

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

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

于 2009-04-24T17:57:43.047 回答
2

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

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

除非您需要动态加载和卸载程序集,否则它们并不值得担心。

于 2009-04-24T17:57:39.050 回答
0

当您必须拥有多个单例实例时,AppDomains 很有用。例如,您有一个为某些设备实现通信协议的程序集,并且该程序集使用单例。如果您想实例化此类的多个实例(与多个设备通信)并且您希望这些实例不会相互干扰,那么 AppDomains 非常适合此目的。

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

于 2009-04-24T17:59:50.903 回答