CLR Via C# 学习笔记(一):CLR执行模型

 

    .Net开发程序有一段时间了,觉得对.Net底层的知识了解的不是很多,开始读《CLR Via C#》,看

    第一章主要还是对CLR.NetFreamkWork做了简单的介绍,主要包括下面几点内容: 

.NetFrameWork的基本概念

程序集在CLR的运行机制

.NetFrameWork模块介绍  

1.    NetFrameWork的基本概念  

      .NetFrameWork 有两个核心部分:CLRCommon 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模块介绍  

FCLFrameWork Class Library)框架类库

Web服务:Web SerViceWCF

Web窗体应用程序

Windows应用程序:WPF

Inernet应用程序:Silverlight

Windows控制台应用程序

Windows服务

数据库存储

组件库

 

CTSCommon Type System)通用类型系统

CLSCommon Language Specification)公共语言规范 

 

本章感觉更多是介绍概念,其中重要的一块就是对CLR运行机制的分析。

posted @ 2012-02-23 00:21  KevinXiao  阅读(147)  评论(0)    收藏  举报