应用程序域(AppDomain)

1、进行错误隔离和安全设置隔离,一个应用程序域如果崩溃不会影响其他应用程序域,功能类似于操作系统的进程
2、在.NET环境下才产生,因为它在CLR中运行
3、应用程序域的创建和销毁所需的开销相对于系统进程小,一个进程中可以包含多个应用程序域
 
  • 在理解应用程序域之前,先了解一下进程的作用,其实应用程序域的作用就相当于进程的作用;

其实,进程就是操作系统用来隔离各个不同应用程序的机制。

  • 在.net之前,应用程序被加载到进程中,可以有多个应用程序共享一个进程,但是这样一旦一个应用程序出错就会导致整个进程崩溃;系统为每个进程分配了虚拟内存(进程不能直接访问物理量内存)

,这样就决定了一个进程是无法访问另一个进程的内存的,自然加载在进程的应用程序也就不能访问另一个应用程序

	的内存了,所以,进程就作为应用程序之间的一个边界而存在着,从而提高了应用程序的安全性,因为这样,当某个
	应用程序出错了就不会影响到其他的应用程序了。
 
  • 既然有了进程能够维持这样的应用程序的安全性,为何还要有应用程序域呢?原因就是进程的性能低(为什么说会对性能有很大影响呢?原因是当多个进程需要相互通信的时候,由于进程间是无法共享内存的,所以就必须在进程之间通过复杂的数据复制,这样对性能就有很大的影响了),在真实的 应用场景中,不可避免的要由进程之间的相互通信,但是进程之间又是无法共享内存的,也就是进程之间是无法 相互调用的,这就引出了应用程序域了。
  • 应用程序域是为了减少系统开销的前提下达到应用程序安全。一个进程中可以有多个应用程序域,一个应用程序域对应一个应用程序;应用程序域也是相当于进程一样的一个

应用程序的边界,但是他对性能的开销比进程低;运行在同一个进程的应用程序是可以共享数据和相互通信的,

	虽然也是不能直接的调用,但是可以通过复制对象或者代理的方式来实现相互的通信。
 
  • 当一个进程被创建的时候系统会默认为该进程生成一个默认应用程序域,该域是无法被卸载的,只有当进程结束了

该域才被销毁,所以如果把程序集或类加载在默认的应用程序域的话,一旦出错了,就会导致进程崩溃。

	所以建议自己创建应用程序域,创建应用程序域的步骤:
	AppDomainSetup setup=new AppDomain();
	setup.LoaderOptimization=LoaderOptimization.SingleDomain;//这种表明该域中的程序集是无法共享的
	AppDomain domain=AppDomain.CreateDomain("Name",NULL,setup);
	......
	......//应用程序运行的代码;
	domain.Unload();
 
  • 一个应用程序要运行就必须有一个进程,进程中就必须有一个应用程序域,所以,首先得先把该应用程序的程序集

加载到域中,可以通过Assembly.Load();或者LoadFrom()来加载到域中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值