- 在理解应用程序域之前,先了解一下进程的作用,其实应用程序域的作用就相当于进程的作用;
其实,进程就是操作系统用来隔离各个不同应用程序的机制。
- 在.net之前,应用程序被加载到进程中,可以有多个应用程序共享一个进程,但是这样一旦一个应用程序出错就会导致整个进程崩溃;系统为每个进程分配了虚拟内存(进程不能直接访问物理量内存)
,这样就决定了一个进程是无法访问另一个进程的内存的,自然加载在进程的应用程序也就不能访问另一个应用程序
- 既然有了进程能够维持这样的应用程序的安全性,为何还要有应用程序域呢?原因就是进程的性能低(为什么说会对性能有很大影响呢?原因是当多个进程需要相互通信的时候,由于进程间是无法共享内存的,所以就必须在进程之间通过复杂的数据复制,这样对性能就有很大的影响了),在真实的 应用场景中,不可避免的要由进程之间的相互通信,但是进程之间又是无法共享内存的,也就是进程之间是无法 相互调用的,这就引出了应用程序域了。
- 应用程序域是为了减少系统开销的前提下达到应用程序安全。一个进程中可以有多个应用程序域,一个应用程序域对应一个应用程序;应用程序域也是相当于进程一样的一个
应用程序的边界,但是他对性能的开销比进程低;运行在同一个进程的应用程序是可以共享数据和相互通信的,
- 当一个进程被创建的时候系统会默认为该进程生成一个默认应用程序域,该域是无法被卸载的,只有当进程结束了
该域才被销毁,所以如果把程序集或类加载在默认的应用程序域的话,一旦出错了,就会导致进程崩溃。
- 一个应用程序要运行就必须有一个进程,进程中就必须有一个应用程序域,所以,首先得先把该应用程序的程序集
加载到域中,可以通过Assembly.Load();或者LoadFrom()来加载到域中。