返回

CLR寄宿和AppDomain

寄宿

概念

在搞明白寄宿这个概念前,首先我们要明白非托管代码如何去调用托管代码的?我们知道,一个托管应用程序首先被操作系统启动,然后由操作系统调用CLR来托管该程序。那么.NET框架到底以什么方式让操作系统来认识它并且可以启动它呢?微软实际将其作为COM服务器实现在一个DLL中,并提供了标准的COM接口。既然是COM服务,也就意味着普通的非托管程序也可以调用CLR来运行托管代码,把这种调用方式叫做寄宿,把调用CLR的非托管程序叫做宿主

寄宿不仅使应用程序可以调用CLR,还可以通过它来进行内存管理、垃圾回收管理、策略管理、事件管理以及线程控制等高级管理。

AppDomain

概念

CLR COM服务器服务器初始化时会创建一个AppDomain,AppDomain是一组程序集的逻辑容器。

CLR初始化时创建的第一个AppDomain称为默认AppDomain,这个默认的AppDomain只有在windows进程终止时才会被注销。

除了默认AppDomain,正在使用非托管com接口方法或托管类型方法的宿主还可要求CLR创建额外的AppDomain。AppDomain是为了提供隔离而设计的。

具体功能

  • 一个AppDomain的代码不能直接访问另一个AppDomain的代码创建的对象

  • AppDomain可以卸载

    CLR不支持从AppDomain中卸载特定的程序集。但可以告诉clr卸载一个AppDomain,从而卸载该AppDomain当前包含的所有程序集。

  • AppDomain可以单独保护

    AppDomain创建后会应用一个权限集,它决定了向这个AppDomain中运行的程序集授予的最大权限。

  • AppDomain可以单独配置

    AppDomain创建后会管理一组配置设置。

Licensed under CC BY-NC-SA 4.0
0