什么是AppDomain?AppDomains的好处是什么,或者为什么微软提出了AppDomains的概念,没有AppDomains的问题是什么?
请详细说明。
发布于 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进程堆之间的编组。
发布于 2009-02-22 10:59:13
可以将AppDomains视为轻量级进程。它们共享过程的许多相同特征,例如,它们有自己的静态、汇编等副本,但它们包含在单个过程中。从操作系统的角度来看,一个进程就是一个进程,不管它可能包含多少AppDomains。
但是,与进程不同的是,AppDomain没有任何线程,除非您显式创建线程。线程可以在任何AppDomain中运行代码。
AppDomains是同一进程的一部分,因此实际上共享同一托管堆。这通常不是问题,因为AppDomain编程模型阻止了AppDomains之间的隐式访问。但是,一些引用实际上是在AppDomains之间共享的,比如类型对象和内部字符串。
https://stackoverflow.com/questions/574708
复制相似问题