System.AppDomain类详解(一)
2018-06-17 21:51:44来源:未知 阅读 ()
AppDomain是CLR(Common Language Runtime:公共语言运行库),它可以加载Assembly、创建对象以及执行程序。
AppDomain是CLR实现代码隔离的基本机制。
每一个AppDomain可以单独运行、停止;每个AppDomain都有自己默认的异常处理;一个AppDomain的运行失败不会影响到其他AppDomain的运行。
CLR在被CLR Host(windows shell or InternetExplorer or SQL Server)加载后,会创建一个默认的AppDomain,程序的入口点(main方法)就是在这个默认的AppDomain中执行。
1、AppDomain与进程比较:
AppDomain被创建是在进程中,一个进程中可以有多个AppDomain,但一个AppDomain只能属于一个进程。
2、AppDomain与线程比较:
与线程,Appdomain是个静态概念,知识限定了对象的边界;线程是个动态的概念,它可以运行在不同的AppDomain中。一个AppDomain内可以创建多个线程,但是不能限定这些线程只能在本AppDomain内执行代码。
CLR中的System.Threading.Thread对象其实是个soft thread,它并不能被操作系统识别;操作系统能识别的是hard thread。一个soft thread只属于一个ppDomain,穿越AppDomain的是hard thread。当hard thread访问到某个AppDomain时,一个AppDomain就会产生一个soft thread。
hard thread有thread local storage(TLS),这个存储区被CLR用来存储hard thread当前对应的AppDomain引用以及soft thread引用。当一个hard thread穿越到另外一个AppDomain时,TLS中的这些引用也会改变。
3、AppDomain与Assembly的比较:
Assembly是.net程序的基本部署单元,它可以为CLR提供识别类型的元数据等等。Assembly不能单独执行,必须被加载到AppDomain中,然后由AppDomain创建程序集中的对象。一个Assembly可以被多个AppDomain加载,一个AppDomain可以加载多个Assembly。每个AppDomain引用到某个类型的时候需要把相应的assembly在各自的AppDomain中初始化。因此,每个AppDomain会单独保持一个类的静态变量。
4、AppDomain与对象的比较:
任何对象只能属于一个AppDomain,AppDomain用来隔离对象,不同AppDomain之间的对象必须通过Proxy(reference type)或者Clone(value type)通信。
引用类型需要继承System.MarshalByRefObject才能被Marshal/UnMarshal(Proxy)。
值类型需要设置Serializable属性才能被Marshal/UnMarshal(Clone)。
5、AppDomain与Assembly Code
首先我们要把程序集分3类
1.mscorlib,这是每个.net程序都要引用到的程序集。
2.GAC,这个是强命名的公用程序集,可以被所有的.net程序引用。
3.Assembly not in GAC,这是普通的assembly,可以不是强命名,不放到GAC中。
static void Main()
{...}
Value | Expected Domains in Process | Each Domain Expected to Run ... | Code for MSCORLIB | Code for Assemblies in GAC | Code for Assemblies not in GAC |
---|---|---|---|---|---|
SingleDomain | One | N/A | Per-process | Per-domain | Per-domain |
MultiDomain | Many | Same Program | Per-process | Per-process | Per-process |
MultiDomainHost | Many | Different Programs | Per-process | Per-process | Per-domain |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Django模版中加载静态文件配置详解 2019-07-24
- Python 运算符 各类运算符总结 2019-07-24
- Frangi形态学滤波详解 2019-07-24
- 如何入门Python爬虫?爬虫原理及过程详解 2019-05-18
- Python 中的设计模式详解之:策略模式 2019-04-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash