zoukankan      html  css  js  c++  java
  • CLR Via CSharp读书笔记(22):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可以卸载、可以单独保护、可以单独实施配置。

  • 相关阅读:
    连接上三星C5,播放音乐断音
    连接上LG NEXUS4播放音乐无声音输出,关机再开机回连再播放OK
    连接上LG G5时,“连接”提示音能听到明显拖尾杂音
    WebRTC原生开发和混合开发优缺点分析对比
    Safari即将支持WebRTC
    WebRTC通话过程中如何避免其它进程音量下降
    WebRTC 中RTT实现方法
    开发Rtmp推流端开发库的几种选择方案
    WebRTC中OPUS编码相关设置和分析
    WebRTC手记之初探
  • 原文地址:https://www.cnblogs.com/thlzhf/p/2805498.html
Copyright © 2011-2022 走看看