Posted on 2006-08-16 15:03
东人EP 阅读(340)
评论(0) 编辑 收藏 引用 所属分类:
.NET
1
、
Microsoft.NET
框架开发平台体系架构
1.1
框架术语简介
通用语言运行时(
Common Language Runtime
,简称
CLR
),顾名思义它是一个可被各种不同的编程语言所使用的运行时。
中间语言(
Intermediate Language
,简称
IL
),它是由语言编译器在编译源代码时所产生的指令。
CLR
在运行时会将
IL
代码编译成本地
CPU
指令。
IL
代码有时也被称作托管代码(
managed code
)。
即时编译器(
Just In Time Compiler
,简称
JIT compiler
)
,IL
代码在运行时所进行的第二次编译所使用的编译函数,
JIT compiler
将
IL
编译成本地代码,存储于动态内存中,当应用程序关闭时,编译的本地代码将被丢弃,下次再启动程序时需要重新编译。
通用类型系统(
Common Type System
,简称
CTS
)
,
作为一种语言代码和另外一种语言编写的代码进行无缝集成的一种机制,其为同一平台下的多种语言开发提供了环境。
1.2
将源代码编译为程序集
其过程又可称为编译时编译,实际上所编译的程序集主要由
IL
、元数据和资源文件(
.jpeg
、
.gif
、
.html
等)组成。
1.3
执行程序集代码
其过程是将
IL
代码编译成为本地
CPU
所识别的指令,这属于
CLR
中
JIT compiler
的工作。以下是编译时的情况:
图
1
所展示的是一个方法在第一次被调用时的情况。
图
1
方法的第一次调用
图
2
所显示的是方法第二次调用时的情况
图
2
方法第二次调用
1.4
托管代码的优势
n
如果应用程序在一些新型的
CPU
(如奔腾
4 CPU
)上运行,
JIT
编译器将能够检测到这种情况,并产生利用这些新型
CPU
提供的特殊指令的本地代码。而非托管应用程序通常被编译为面向具有最小通用功能集合的
CPU
平台,一般会避免使用
CPU
提供的特殊指令。而这些指令往往会在新的
CPU
上为应用程序带来很高的性能提升。
n
JIT
编译器能检测到正在运行的机器上某些总是返回错误的布尔测试。如:
if (numberOfCPUs > 1) {…}
如果宿主机器只有一个
CPU
,那么这段代码,
JIT
编译器将不会产生任何
CPU
指令。代码量减小,速度也会更快。
n
在应用程序运行时,
CLR
能够分析评估代码的执行情况,并有选择地重新将
IL
代码编译为本地代码。根据观察到的执行模式,被编译的代码可以被重新组织以提高分支预测的成功率。