文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>CLR VIA C# 笔记一(1.4)

CLR VIA C# 笔记一(1.4)

时间:2011-06-10  来源:Pacer

1.4执行程序集的代码

 

 IL是与CPU无关的机器语言,可将它视为一种面向对象的机器语言.高级语言通常只公开了CLR的所有功能的一个子集,而IL汇编语言允许开发人员访问CLR的所有功能.

 若某一高级语言隐藏了需要的CLR功能,那么可以使用IL或者其他公开了这一功能的高级语言来写.这也是CLR其中一个非常出色的特性”混合语言编程”,允许在不同编程语言之间方便地切换,同时又保持紧密集成.

CLR的“即时”编译器(just in time,JIT)会把IL编译成本地CPU指令.

方法的调用图:

 

一个方法只有在首次调用时才会造成性能损失,以后都无需重新验证IL并把它编译成本地代码,因为JIT编译器将本地CPU指令存储到了动态内存中,当应用程序终止时,代码也会被丢弃,再次运行程序需重新验证IL并编译.

JIT编译器会对本地代码进行优化,托管代码相较于非托管代码的优势:

1.              JIT编译器会判断运行在怎样的CPU上,并利用CPU支持的任何特殊指令来提升程序性能,而非托管通常是针对最小功能集合的CPU来编译的.

2.              JIT编译器会判断一个特定的测试是否在它运行的机器上总是失败,如果主机只有一个CPU,JIT编译器不会为上树代码生成任何CPU指令,本地代码将针对主机进行优化,最终代码变得更小,执行得更快.

3.              CLR可以评估代码的执行,并将IL重新编译成本地代码.

 

.NET Framework SDK 提供的NGen.exe工具可以将程序集的所有IL代码编译成本地代码,并保存到磁盘文件中.在运行时,一旦加载这个程序集,CLR会判断是否存在这个程序集的预编译版本并优先加载,这样可以避免运行时进行编译.但NGen.exe生成的代码不会像JIT编译器生成的代码那样高度优化.

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载