了解Windows中的AppDomains

时间:2009-12-26 20:48:48

标签: .net windows build-process assemblies appdomain

我想更好地了解appDomains。据我所知,Windows在一个进程中运行所有应用程序。每个应用程序都封装在它自己的对象中,该对象位于此进程中。此对象还包含一些无法共享的全局变量。进程中的所有对象都不能彼此共享任何数据。我理解的appDomain是一个位于windows进程中的特殊对象。它所做的只是保留对分配给它的所有程序集的引用。如果有人可以详细说明或纠正我,如果我错了。任何好的资源也都可以。

1 个答案:

答案 0 :(得分:8)

听起来这里发生的事情是,您将AppDomain的概念与.Net中的实现混淆。

让我们先从概念开始。您可以在概念上将其视为与线程或进程相同的事物。启动过程相当昂贵,但在各个进程拥有的内存之间提供高度保护/分离。线程启动起来相当便宜,但对跨线程内存访问的保护较少。 AppDomain本质上为线程带来了一些进程级保护。

你可以用这个概念做一些有趣的事情。例如,进程不限于单个AppDomain,因此您可以让多个应用程序共享一个进程,并且仍然可以确定这两个应用程序都不会干扰或崩溃另一个进程。但主要原因与实施有关。

。正在管理的.Net语言设计有内存模型,以便管理员可以确保应用程序外部的任何内容都不会不恰当地干扰应用程序的内存。它们也是使用单独的线程进行垃圾收集而设计的,这导致我们将应用程序作为一个进程中的一个线程运行。即使您只使用一个线程,可以启动更多,或加载其他程序集。那么,AppDomain的目的是在进程中封装你的应用程序(及其内存)。它可以实现为保持对程序集的引用的对象,但这与概念是分开的。