AppDomain能够视为一种轻量级进程,AppDomain能够像进程同样独立加载Assembly。一个Windows进程能够包含多个AppDomain。可是与进程不一样的是,进程与线程有隶属关系,可是,AppDomain和进程之间是正交的,他们没有隶属关系。例如,一个进程存在两个AppDomain:ADA和ADB,对象A来自ADA,对象B来自ADB,若是A的某个方法调用了B的方法,这两个方法会在同一个线程中执行。
使用AppDomain的好处
建立AppDomain所须要的系统资源比建立一个Windows进程要少;
同一个Windows进程内的AppDomain之间能够共享资源,如地址空间、线程、CLR等等;
Notice:
当AppDomain加载了某个Assembly后,就不能再将它从AppDomain中卸载掉,除非将整个AppDomain卸载,可是卸载AppDomain会产生很是严重的后果。
AppDomain的孤立性
1.
2.
3.
Host and Hosting
CLR并无和操做系统集成,进程建立时必须由本身完成加载CLR的操做。加载CLR是由运行库宿主(Runtime Host)来完成的,Host的非托管代码部分负责CLR的加载、配置以及将当前线程转交给托管代码,CLR加载完成后,Host还要负责处理未捕获的异常等任务。一个CLR宿主与操做系统,以及CLR的关系以下图所示。
不一样的运行库宿主将会影响应用程序的性能,还能够定义应用程序可用的功能。微软预提供的Runtime Host包括: 数据库
弱引用
在应用程序执行期间,每一个对象在任意时刻要么是活动的,也就是有引用指向这个对象;要么就是非活动的,也就是没有引用指向这个对象,也就不能再访问这个对象了。为了知足一些应用程序(好比缓存等)的须要,对象还能够有第三种中间状态,若是对象处于这样的状态,应用程序还能够访问这个对象,GC也能够随时释放它。要使对象处于这样的状态就须要使用弱引用(weak reference)来引用对象。使用弱应用引用的对象就既能够被应用程序访问,又能够被GC回收。 缓存