Welcome

首页 / 软件开发 / C# / Remoting基本原理及扩展机制(下)

Remoting基本原理及扩展机制(下)2007-10-04idior让我们在开始本节内容之前先了解以下几个基本概念。

应用程序域

应用程序域(通常简称为AppDomain)可以视为一种轻量级进程。一个Windows进程内可以包含多个AppDomain。AppDomain这个概念的提出是为了实现在一个物理服务器中承载多个应用程序,并且这些应用能够相互独立。ASP.NET中利用AppDomain在同一个进程内承载了多组Web应用程序就是一个例子。实际上微软曾进行过在单一进程内承载多达1000个简单Web应用程序的压力测试。

使用AppDomain所获得的性能优势主要体现在两方面:

·创建AppDomain所需要的资源比创建一个Windows进程更少。

·同一个Windows进程内所承载的AppDomain之间可以互相共享资源,如CLR、基本.NET类型、地址空间以及线程。

而各个AppDomain之间的独立性体现为以下这些特征:

·一个AppDomain可以独立于其他的AppDomain而被卸载。

·一个AppDomain无法访问其他AppDomain的程序集和对象。

·若没有发生跨边界的异常抛出,一个AppDomain拥有自己独立的异常管理策略。这意味着一个AppDomain内出现问题不会影响到同一个进程内中的其他AppDomain。

·每个AppDomain可以分别定义独自的程序集代码访问安全策略。

·每个AppDomain可以分别定义独自的规则以便CLR在加载前定位程序集所在位置。

可以看出应用程序域是进程中的一个子单元,不过在.NET中还存在一个比应用程序域还要细粒度的单元——.NET上下文(Context)。

.NET Context

一个.NET 应用程序域能够包含多个被称为.NET上下文的实体。所有.NET对象都存在于上下文中,每个应用程序域中至少存在一个上下文。这个上下文称为应用程序域的默认上下文,它在应用程序域创建的时候就创建了。下图总结了它们之间的关系: