• 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可以卸载、可以单独保护、可以单独实施配置。

  • 相关阅读:
    测试脚本
    浅谈优化SQLServer数据库服务器内存配置的策略
    真正的取真实IP地址及利弊Asp.net
    ASP.NET一些常用正则表达式
    (CHMSoftware)工具集锦
    仿真方面的文章
    TPlan测试过程管理工具技术摘要
    Linux 2.6内核的精彩世界(多媒体)
    Ajax技术实践之完成Ajax自动完成功能
    硬件测试
  • 原文地址:https://www.cnblogs.com/changrulin/p/4782627.html
Copyright © 2020-2023  润新知