六:执行程序集的代码

     前面已经知道了什么是托管代码、IL、元数据、程序集等,现在总体来看看咱们写的代码是在DotNet平台下是个怎么运行的。
     在执行某一方法时,CLR会检测出该方法的代码引用的所有类型,导致CLR分配一个内部数据结构,它用于管理对象内存的访问。JITCompiler函数负责将一个方法的IL代码编译成本地CPU。由于IL是被"即时"编译的,所以将CLR的这个组件称为即时(JIT,just-in-time)编译器。一个方法只有在第一次被执行时才被JIT编译器编译,所以一个方法只有在首次调用时才会造成一定的性能损失,以后对该方法的所有调用都以本地代码的形式全速运行,JIT编译器将本地CUP指令保存在动态内存中,一旦应用程序终止,编译好的代码也会被丢弃,要再次运行应用程序时得重新编译。对于大多数应用程序来说,因JIT译器造成的性能损失不是很显著,因为大多数应用程序倾向于反复调用相同的方法,而且JIT编译器会对本地代码进行优化。
     如下图为代码运行的的整个流程:

 
 

posted @ 2009-01-21 09:45  Done  阅读(351)  评论(0编辑  收藏  举报