2009-04-22 61 views
9

即使我们没有专门创建一个AppDomain,每个C#程序是否都有一个AppDomain?为什么需要?如果我们不将它们加载到单独的AppDomain中,我已阅读了关于第三方程序集崩溃整个应用程序的信息。我没有很好地理解这一点。任何人都可以解释这一点。是否有每个C#程序的AppDomain?

回答

15

AppDomain几乎就像一个进程,它是您的应用程序运行的基础架构。需要将一个.NET程序集加载到AppDomain中才能运行。不需要将第三方程序集加载到单独的AppDomains中,但是如果这样做,它会在它们之间提供隔离(如两个单独的进程),并且一个中的故障不会影响另一个。应用程序域可以独立卸载。

举例来说,SQL Server使用AppDomain s在其进程中安全地加载CLR程序集。

2

每个应用程序至少有一个应用程序域,是的。

我不知道第三方组件的含义是什么意思。

1

对于每个可以创建尽可能多的程序,至少有一个应用程序域,但您很少需要多个应用程序域。

它基本上是一个容器,其中运行特定信任的代码正在运行。

1

有一个应用程序加载到的默认应用程序域(每个实例都有自己的)。

崩溃事件意味着第三方程序集(即插件)在崩溃时会崩溃整个应用程序,如果不将其加载到单独的应用程序域中。因此,将插件加载到单独的应用程序域是一种很好的做法,因为应用程序域中的崩溃只会使该应用程序域而不是其他域崩溃。 CLR Add-In blog有一些关于此的帖子。

要注意的重要一点是,一个应用程序域并不一定需要在同一过程中或在同一系统上,所以你基本上需要它的远程处理。

3

我看了一下导致崩溃的第三方组件,如果我们不做的AppDomain

的使用,我认为你是在谈论到单独的应用程序域加载其他组件。这样他们可以从你的地址空间隔离,以防止影响你的代码崩溃。成本是在一个单独的应用程序域与装配沟通更加困难,有PERF的惩罚,所有的呼叫需要跨应用程序域边界进行军法。

这是一个相当先进的话题,我建议在Richter(其他书是可用的)阅读。

相关问题