【问题标题】:Understanding AppDomains in Windows了解 Windows 中的 AppDomain
【发布时间】:2009-12-26 20:48:48
【问题描述】:
我正在努力更好地理解 appDomains。据我了解,Windows 在一个进程中运行所有应用程序。每个应用程序都封装在它自己的对象中,该对象驻留在此进程中。该对象还包含一些无法共享的全局变量。进程中的所有对象不能相互共享任何数据。据我了解,appDomain 是一个位于 windows 进程中的特殊对象。它所做的只是保留对分配给它的所有程序集的引用。如果有人可以详细说明这一点,或者如果我错了,请纠正我。任何好的资源也可以。
【问题讨论】:
标签:
.net
windows
build-process
assemblies
appdomain
【解决方案1】:
听起来这里发生的事情是您将 AppDomain 的 概念 与 .Net 中的 实现 混淆了。
让我们先从概念开始。您可以在概念上将其视为与线程或进程相同的事物。进程的启动成本相当高,但在各个进程拥有的内存之间提供了高度的保护/分离。线程启动起来相当便宜,但对跨线程内存访问的保护较少。 AppDomain 本质上为线程带来了一些进程级别的保护。
你可以用这个概念做一些有趣的事情。例如,进程不限于单个 AppDomain,因此您可以让多个应用程序共享一个进程,并且仍然可以相当确定这两个应用程序都不会干扰或崩溃另一个。但主要原因与实施有关。
.Net 语言被管理,设计有一个内存模型,这样管理器可以确保你的应用程序之外的任何东西都不会不恰当地干扰你的应用程序的内存。它们还设计为使用单独的线程进行垃圾收集,这将我们带到一个地方,您的应用程序仅作为进程中的一个线程运行。即使您只使用一个线程,您可以启动更多,或加载额外的程序集。因此,AppDomain 的目的是将您的应用程序(以及它的内存)封装在进程中。它可以作为一个对象来实现,该对象保留对您的程序集的引用,但这与概念是分开的。