首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是AppDomain?

什么是AppDomain?
EN

Stack Overflow用户
提问于 2009-02-22 10:37:33
回答 2查看 84.2K关注 0票数 143

什么是AppDomain?AppDomains的好处是什么,或者为什么微软提出了AppDomains的概念,没有AppDomains的问题是什么?

请详细说明。

EN

回答 2

Stack Overflow用户

发布于 2012-09-02 11:09:48

应用程序域实现了连续虚拟内存空间的概念,该空间包含可直接访问或引用的代码和内存中资源。

单独的AppDomains不共享存储空间,因此,一个AppDomain不能直接引用另一个not中的内容。特别是,数据必须通过按值复制的过程在AppDomains之间传递。特别是,依赖于指针和内存地址的引用对象必须首先从源序列化,然后反序列化到目标AppDomain。

以前在Windows系统上,内存边界是由进程实现的;然而,构建进程是资源密集型的。它们还具有作为线程边界的双重用途。另一方面,应用程序域只关心内存边界或地址空间。线程可以在AppDomains之间“流动”(也就是说,一个过程可以调用另一个AppDomain中的入口点并等待它返回。该线程被称为在另一个AppDomain内“继续”执行)。

此体系结构的一个重要好处是,无论AppDomains位于相同进程、不同进程还是位于不同的机器上,应用程序域之间的通信模式都保持不变:即参数数据的序列化和反序列化(封送)过程。

注1:跨AppDomain的线程的含义是对另一个AppDomain的阻塞或同步方法调用(而不是非阻塞或异步调用,后者会产生另一个线程继续在目标AppDomain中执行,并在其当前AppDomain中继续执行,而不等待响应)。

注2:有一种叫做线程本地存储的东西。然而,更好的名称应该是应用程序域线程本地存储,因为线程在跨越应用程序域时会留下它们的数据,但在返回时会重新获得它们:http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

Note3: Windows是一个带有相关堆的.Net进程应用程序。它可以在堆中托管一个或多个AppDomains。但是,AppDomains被设计为彼此互不关心,并通过封送处理相互通信。可以想象,可以在共享相同Windows的通信AppDomains之间执行绕过编组的优化,从而绕过相同的.Net进程堆之间的编组。

票数 53
EN

Stack Overflow用户

发布于 2009-02-22 10:59:13

可以将AppDomains视为轻量级进程。它们共享过程的许多相同特征,例如,它们有自己的静态、汇编等副本,但它们包含在单个过程中。从操作系统的角度来看,一个进程就是一个进程,不管它可能包含多少AppDomains。

但是,与进程不同的是,AppDomain没有任何线程,除非您显式创建线程。线程可以在任何AppDomain中运行代码。

AppDomains是同一进程的一部分,因此实际上共享同一托管堆。这通常不是问题,因为AppDomain编程模型阻止了AppDomains之间的隐式访问。但是,一些引用实际上是在AppDomains之间共享的,比如类型对象和内部字符串。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/574708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档