CLR是如何被加载并工作的
如何 工作 加载 CLR
2023-09-11 14:16:51 时间
当运行Windows应用程序的时候,CLR总是默默地为服务着。CLR到底是如何被加载并运行呢?
首先,Microsoft专门为CLR定义了一个标准的COM接口。
安装某个版本的.NET Framework,CLR被包含在DLL中,作为COM服务器在Windows注册表中注册。
一台电脑上可能安装多个版本的CLR。打开开发人员命令提示,输入CLRVer.exe,可以看到当前电脑上安装的CLR版本。
比如,在C:\Windows\Microsoft.NET\Framework\v2.0.50727文件夹中,CLR被包含在mscorwks.dll中;在C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夹中,CLR被包含在clr.dll中。
当双击一个应用程序,就启动一个独立的Windows进程,在.NET最新版本文件夹中有一个类似MSCoreEE.dll的组件去读取应用程序的.NET版本,然后把对应的某个CLR版本加载到进程中。总之,CLR是寄宿在进程内的。
一个进程中可以有几个CLR版本吗?
从.NET 4.0起,就可以在一个进程中加载多个CLR版本,而且还不会造成兼容性的问题。
CLR是什么时候卸载的?
只有当终止进程的时候才能卸载CLR。
CLR加载mscorlib中所有的程序集。
CLR加载托管堆。
CLR加载应用程序域,而且还可以加载多个应用程序域,默认加载的应用程序域是被设置为"启动项目"的那个。
在应用程序域内运行多个线程,有些线程是主线程,有些线程是工作线程。
相关文章
- 查看jQuery file upload的image preview如何工作的
- 工作7年的测试工程师,明白了如何正确的“卷“
- 新项目之初性能测试工作如何前移?
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
- 测试工程师, 入职以后如何开展工作?
- 《惢客创业日记》2019.11.13(周三) 如何让她为自己工作?(一)
- TED演讲 | “增时代”到来,看AI如何加持人类
- 《Python数据挖掘:概念、方法与实践》一1.4 如何建立数据挖掘工作环境
- 2年经验总结,告诉你如何做好项目管理
- a-cascader如何设置默认值?ant级联选择器用法。
- ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建
- ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后
- Linux:如何不重启的情况下,识别到新加的盘
- 作为一个代码搬运工,如何应对突如其来的灵魂拷问『你今天做了什么』?
- HTML+CSS-如何定义让两个div横向排列
- 【AGC】如何解决事件分析数据本地和AGC面板中显示不一致的问题?
- 面试官:react中的setState()是同步还是异步?如何证明?
- 第41周日思考如何更好的工作
- 使用 Chat GPT如何将工作时间减少一半以上并让收入翻倍的方法
- (续)在深度计算框架MindSpore中如何对不持续的计算进行处理——对数据集进行一定epoch数量的训练后,进行其他工作处理,再返回来接着进行一定epoch数量的训练——单步计算
- 在深度计算框架MindSpore中如何对不持续的计算进行处理——对数据集进行一定epoch数量的训练后,进行其他工作处理,再返回来接着进行一定epoch数量的训练——单步计算
- 系统结构杂谈-计算机底层学习如何入门(CS-EE通用)
- 如何根据不同的工作负载调整存储性能
- 浅析Git Subtree的原理与实际应用:git subtree是什么、子仓库与仓库共用、共用代码需求常规处理方式及为什么使用git subtree以及如何使用Git Subtree在多个Git项目间双向同步子项目
- 浏览器工作原理:浅析浏览器中的页面 - 渲染流水线 - CSS如何影响首次加载时的白屏时间
- 浅析浏览器是如何工作的(一):V8引擎、JIT机制、JS代码解释执行与编译执行
- 浅析.env文件的工作原理以及它是如何实现的
- JS引擎是如何工作的?从调用堆栈到Promise
- 如何开展ERP实施阶段的监理工作
- spring源码分析之spring注解@Aspect是如何工作的?
- 知识点滴 - 如何写项目总结