六、CLR下的托管代码应用程序与非托管代码程序之间的性能对比

1、托管程序二次编译的问题,以及微软做的优化

五、CLR加载程序集代码时,JIT编译器对性能的产生的影响中介绍了CLR下托管应用程序的二次编译对性能产生的影响.事实上,在IL编译成本机代码的时候的时候 确实会影响性能,也确实会分配动态内存.

但是,在微软做了大量的性能优化工作之后,将这些额外的开销保持在最低的限度之内.

2、托管程序的实际性能

事实上,托管程序的性能实际上要比非托管应用程序要好,举个例子,当JIT编译器在运行时将IL代码编译器编译成本机代码的时候,编译器对执行环境的认识比非托管编译器更深刻。

如果JIT编译器没有使托管应用程序达到应有的效果,如果需要进一步确认,有两种方法:

(1)、.Net Framework SDK提供的NGen.exe工具

该工具将程序集的所有的IL代码编译成本机代码,并将这些本机代码保存到一个磁盘文件中,在运行时加载程序集时,CLR自动判断是否存在该程序集的预编译版本。如果是,CLR就加载预编译版本.

注:NGen.exe对最终执行环境的预设是很保守的,所以,NGen.exe生成的代码不会像JIT编译器生成的代码那样进行高度优化。

(2)、使用ProfileOptimization类

原文地址:https://www.cnblogs.com/GreenLeaves/p/8400591.html