托管应用程序的性能优于非托管应用程序?
来源:互联网 发布:淘宝卖保健品填厂家 编辑:程序博客网 时间:2024/06/07 09:22
《CLR via C#》中作者的一句话一直让我铭记,颠覆的我的三观:
“虽然你可能很难相信,但许多人(包括我)都认为托管应用程序的性能实际上已经超越了非托管应用程序”!
JIT编译器是以函数为单位解析IL到机器码的,而且解析只发生在第一次调用,将解析的机器码放在指定内存中,以后再调用这个函数就会从该内存中直接调用机器码而不需要解析。如果所有函数都调用一遍,以后再调用就跟非托管一样直接调用机器码,效率会一样,问题是总得有第一次调用吧!怎么会比非托管快呢???而且现在主流的追求效率的服务器Apache, Nginx甚至NodeJS都是C++的。。。
书上的解释视乎也合理,概括说就是非托管代码以“统一”方式生成机器码比JIT编译器“因地制宜”效率更差。
托管代码相比较于非托管代码的优势:
1. JIT编译器能判断应用程序是否运行在inter Pentium 4 CPU上,并生成相应的本机代码来利用 Pentium 4支持的任何特殊指令。相反,非托管应用程序通常是针对具有最小功能集合的CPU编译的,不会使用提升性能的特殊指令。
2.JIT编译器能判断一个特定的测试在它运行的机器上是否总是失败。例如:
if(numberOfCPUs > 1){...} 如果主机只有一个CPU,JIT编译器不会为上述代码生成任何CPU指令。
3.应用程序运行时,CLR可以评估代码的执行,并将IL重新编译成本机代码。重新编译的代码可以重新组织,根据刚才观察到的执行模式,减少不正确的分值预测。
个人认为,不能一概的下结论说谁比谁强,因应用程序不同而不同吧!
阅读全文
0 0
- 托管应用程序的性能优于非托管应用程序?
- 托管应用程序和非托管应用程序
- 什么是托管应用程序和非托管应用程序
- 托管应用程序和非托管应用程序
- 编写高性能的托管应用程序:入门
- 编写高性能的托管应用程序:入门
- 编写高性能的托管应用程序:入门
- 编写高性能的托管应用程序:入门
- 编写高性能的托管应用程序:入门
- 托管程序优于非托管程序的地方
- 【转】什么是托管应用程序和非托管应用程序
- C++ 应用程序 托管类型
- 应用程序托管代码分析
- 托管代码与非托管代码的性能比较
- WCF服务的IIS托管(应用程序)
- 为基于 Microsoft .NET Framework 精简版的应用程序编写非托管函数
- 桌面应用程序托管asp.net应用程序
- 托管和非托管的问题
- main函数参数_可变参数
- HDU 2017多校联赛-1012 Balala Power!
- 程序设计思维
- 给时间定一个目标
- 最大公约数(欧几里得算法)
- 托管应用程序的性能优于非托管应用程序?
- Unity3D中上斜坡会下滑的问题
- POJ
- 所爱图书
- STL_vector (不定长数组)
- ThreadPoolExecutor 扩展
- Java将一个list等分成n个list方法
- #COCI#玻璃杯(状压DP)
- jdbc连接oracle数据库