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 等