CLR寄宿

DoubleJ 2021/1/5 16:08:29

CLR寄宿.NET Framework在Windows平台的顶部运行,意味着.NET Framework必须用Windows可以理解的技术构建:所有托管模块和程序集文件都必须使用Windows PE文件格式,要么是一个Windows EXE文件,要么是一个DLL文件。CLRCreateInstance函数定义在程序集MSCorEE.dll中,该程…
CLR寄宿

.NET Framework在Windows平台的顶部运行,意味着.NET Framework必须用Windows可以理解的技术构建:所有托管模块和程序集文件都必须使用Windows PE文件格式,要么是一个Windows EXE文件,要么是一个DLL文件。

CLRCreateInstance函数

定义在程序集MSCorEE.dll中,该程序集一般被成为垫片,该文件一般在C:\Windows\System32目录中。它的工作是负责决定创建哪个版本的CLR。

一台机器可以安装多个版本的CLR,但是只有一个版本的MSCorEE.dll文件。机器上安装的MSCorEE.dll版本是与安装的最新版的CLR一起发布的那个版本。

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

GetRuntime函数返回一个指向非托管接口ICLRRuntimeInfo的指针,通过调用GetInterface方法获得ICLRRuntimeHost接口,可利用该接口做以下事情:

  • 设置宿主管理器:告诉CLR内存分配、线程调度/同步、程序集加载等决策。宿主还可以声明它想获得有关垃圾回收启动和停止以及特定操作超时的通知
  • 获取CLR管理器:告诉CLR阻止使用某些类/成员。宿主还能分辨哪些代码可以调式而哪些代码不能调试,以及一些特定事件(AppDomain卸载、堆栈溢出异常)发生时宿主应该调用哪些方法
  • 初始化并启动CLR
  • 加载一个程序集并执行其中的代码
  • 停止CLR,阻止任何更多的托管代码在Windows进程中运行

*Windows进程完全可以不加载CLR,只有需要在进程中执行托管代码时才需要加载它

CLR寄宿的好处
  • 可以用任何编程语言来编写
  • 代码在JIT编译后执行而不是一边解释一边执行,所以速度很快
  • 代码使用垃圾回收避免内存泄漏和损坏
  • 代码在一个安全的沙箱中运行
  • 宿主不必操心提供一个丰富的开发环境。宿主可以利用现有的技术,包括语言、编译器、编辑器、调试器、profiler等
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[CLR寄宿]http://www.zyiz.net/tech/detail-150602.html

上一篇:1.多用户博客网站开发实战之开篇(程序员为什么写博客)

下一篇:改进你的c#代码的5个技巧(二)

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程