认识ASP.NET 中的 AppDomain


AppDomain的概念

一个Process可以多个AppDomain,不同的AppDomain互相隔离,拥有自己的Global Data: Cache, Application, and Session objects,且彼此不受影响。如下图所示:


Shadow Copies 的概念
一个很常见的例子,我们的web应用程序中的某些dll要更新了(版本升级)。
通常我们只要把要更新的dll覆盖成最新版本的就行了。而这期间,ASP.NET到底做了什么工作呢?

首先我们知道当一个process加载了一个dll,process就会锁住dll,你就不能用新版本的dll覆盖这个旧版本的dll。

当你把更新的dll文件复制到应用程序的bin子目录下,ASP.NET runtime就知道有新的代码要去执行。因为ASP.NET不能在已经存在的AppDomain替换dll,所以就启动了一个新的AppDomain,新的AppDomain就处理所有新的请求。对于旧的AppDomain,已存在的请求会继续直到执行到完。一旦所有的旧请求都执行完,旧的AppDomain也就卸载了。

这就是AppDomain的一个特性叫作" Shadow Copy ", AppDomain将bin目录下所需要的dll拷贝到"临时单元",而被锁定和加载到内存的正是"临时单元"(拷贝到内存的是阴影,而不是原物体--个人理解)。正是由于" Shadow Copy "特性, 我们才可以替换bin目录下任何的dll来实现版本更新,并且不会影响web应用程序正常使用。

AppDomain的好处:

1. 可以实现动态加载程序集(update)而不影响应用程序使用
2. 整个AppDomain可以被销毁而不影响Process


转载于:https://www.cnblogs.com/webfpc/archive/2009/09/20/1562064.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值