CLR Via C# 学习笔记(一):CLR执行模型
用.Net开发程序有一段时间了,觉得对.Net底层的知识了解的不是很多,开始读《CLR Via C#》,看
第一章主要还是对CLR和.NetFreamkWork做了简单的介绍,主要包括下面几点内容:
l .NetFrameWork的基本概念
l 程序集在CLR的运行机制
l .NetFrameWork模块介绍
1. NetFrameWork的基本概念
.NetFrameWork 有两个核心部分:CLR(Common Language Runtime)公共语言运行时和FCL(框架类库)。CLR是一个可有多种编程语言使用的“运行时”。其主要的核心功能包含:内存管理、程序集加载、安全性、异常处理和线程同步等。
运行在CLR框架下的编译器都会把代码编译成为一个托管模块:托管模块一个有4个部分组成:PE32/PE32+头、CLR头、元数据、IL代码。
2. 程序集在CLR的运行机制
在一个方法的执行前.CLR会检测方法的代码引用的所有类型,并分配一个内部数据结构,用于管理对所引用的类型的方法。在这个内部的数据结构中,类型定义的方法都有一个对应的记录项,记录项中指向方法实现的具体内存中。
当方法中的代码被执行时,JITCompiler会在定义(该类型的)程序集中的元数据中查找被调用的方法的IL。然后验证IL代码,并将IL戴拿编译成本地CPU。本地CPU指令被保存到一个动态分配的内存块中。(对编译好的代码做了缓存,所以.net代码第一次执行的时候都是比较慢,后面就快的原因)然后返回CLR为类型创建的内部数据结构,找到与被调用的方法对应的记录,修改最初对JITComplier的引用,让它指向内存块,然后跳转到内存块中的代码。
当该类型的代码第二次执行的时候,会跳过JITComplier,会直接执行内存中已经编译好的本地代码。分配到内存中的本地代码会在程序终止的时候被丢弃掉。另外JITComplier在编译的时候对本地代码进行优化,以获得更好的性能。
PDB文件:PDB文件帮助调试器查找局部变量并将IL指令映射到源代码。
3. NetFrameWork模块介绍
FCL(FrameWork Class Library)框架类库
Web服务:Web SerVice、WCF
Web窗体应用程序
Windows应用程序:WPF
富Inernet应用程序:Silverlight
Windows控制台应用程序
Windows服务
数据库存储
组件库
CTS(Common Type System)通用类型系统
CLS(Common Language Specification)公共语言规范
本章感觉更多是介绍概念,其中重要的一块就是对CLR运行机制的分析。

浙公网安备 33010602011771号