Clr Via C#读书笔记---CLR寄宿和应用程序域

#1 CLR寄宿

开发CLR时,Microsoft实际是将他实现成包含在一个dll中的COM服务器。Microsoft为CLR定义了一个标准的COM接口,并为该接口和COM服务器分配了GUID。安装.NET Framework时,代表CLR的COM服务器在Windows注册表中注册

任何Windows应用程序都可以寄宿CLR,非托管宿主应该调用MetaHost.h文件中声明的CLRCreateInstance函数,该函数是在MSCoreEE.dll文件中实现的,该dll被称为"垫片"(shim),主要用于决定创建哪个版本的CLR,本身不包含CLR COM服务器

对于1.0,1.1和2.0,CLR代码在MSCorWks.dll文件中;对于4.0版本,CLR代码在Clr.dll文件中。

CLRCreateInstance函数可以返回一个ICLRMetaHost接口。宿主应用程序可以调用这个接口的GetRuntime函数,指定宿主要创建的CLR版本。然后,垫片将所需版本的CLR加载到宿主程序的进程中

GetRuntime函数返回一个指向非托管接口ICLRRuntimeInfo的指针,利用该接口的GetInterface方法获得ICLRRuntimeHost接口。

随着.NET Framework 4.0的发布,Microsoft支持在一个Windows进程中同时加载CLR v2.0和v4.0,允许为.NET Framework 2.0和4.0写的不同组件同时运行。可以利用ClrVer.exe工具检查在任何给定的进程中,加载了哪个(哪些)版本的CLR.

一个CLR加载到一个Windows进程中后,便永远不能卸载,CLR从进程中卸载的唯一方式是终止进程,这导致Windows清理进程使用的所有资源,包括CLR在内。

#2 AppDomain:

CLR COM服务器初始化时,会创建一个AppDomain。AppDomain是一组程序集的逻辑容器。CLR初始化时创建的第一个AppDomain称为默认AppDomain,这个默认的AppDomain只有在Windows进程终止时才会被销毁。

AppDomain唯一的作用就是进行隔离:

一个AppDomain中的代码创建的对象不能由另一个AppDomain中的代码直接访问,只能使用"按引用封送"或者"按值封送"的语义。

AppDomain可以卸载、可以单独保护、可以单独实施配置。

转载于:https://www.cnblogs.com/changrulin/p/4782627.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CLR via C# 中文版 第三版(高清 全 带书签) 套用清清月儿的一句话就是:此书不看,看遍千书也枉然。 此书权威性地球人都知道。 (文件太大,分两个包上传,这是第二个压缩包。两个都下载完才可以减压,这个就不用我说了吧。) .NET技术领有两位世界级专家。      一位是Don Box。他以《Essential COM》确立了自己COM专家的地位,在.NET时代,Don Box又以《Essential .NET》(Volume I The Common Language Runtime)确立了自己.NET专家的地位。2002年,Microsoft将其招致麾下,成为.NET Architect,与Anders Hejlsberg一起研发并推出了Linq。由于Don Box的杰出贡献,Microsoft授予其“杰出工程师(Distinguished Engineer)”称号,目前从事声明式语言及工具的开发。可能是工作繁忙,以致没有后续著作问世。      另一位是Jeffrey Richter。Jeffrey Richter是.NET与Windows技术的咨询培训机构Wintellect的共同创立者(co-founder),在Windows领早已是家喻户晓的世界级专家。从1999年起参与Microsoft .NET平台的研发,受Microsoft委托,为其开发人员提供技术咨询。在此过程中,诞生了《CLR via C#》。      这本书的第一版名为《Applied Microsoft .NET Framework Programming》,2002年出版,阐述的是.NET 1.0/1.1的相关内容。于2006年推出了针对 .NET 2.0的第二版,书名改为《CLR via C#》。2010年2月,Jeffrey Richter又推出了针对Visual Studio 2010、.NET 4.0、C# 4.0的集大成之作《CLR via C#》第三版。      本书分为五个部分:      第一部分,CLR基础(CLR Basics),介绍CLR的执行模型,程序集概念,以及创建、打包、部署、管理程序集等。      第二部分,设计类型(Designing Types),包括CLR类型基础,基础类型,方法,特性(Property),事件,泛型,接口等内容。      第三部分,基本类型(Essential Types),包括字符、字符串及文本的处理,枚举类型,数组,委托(Delegate),自定义属性(Attribute),可控制类型等。      第四部分,核心设施(Core Facilities),包括异常与状态管理,自动内存管理(垃圾收集),CLR托管与应用程序(AppDomain),程序集加载与反射,运行时序列化等。      第五部分,线程(Threading),这是第三版新增加的内容,包括线程基础,计算密集的异步操作,I/O密集的异步操作,基本的线程同步构造,混合的线程同步构造等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值