托管代码一定比非托管代码性能低吗?解决思路
发布时间:2011-06-23 20:18:18 文章来源:www.iduyao.cn 采编人员:星星草
托管代码一定比非托管代码性能低吗?
众所周知,在托管环境中,代码的编译需要经过两个阶段才能完成的。首先,面向通用语言运行时的编译器扫描源代码将其编译成中间代码(IL)和元数据等组成的托管模块;其次才是在运行时通过JIT编译器即时编译为本地的CPU指令集。我们认为基于这些原因,托管代码就一定比非托管代码性能低。
我觉得这样的论调是不一定正确的,首先,在运行时某个方法IL代码被JIT编译器及时编译为本地CPU指令,这会产生一定的性能损失,这是肯定的,但是对该方法的后续调用都将以本地代码做全速执行,我想大家想一想也能记起来。
其次,如果应用程序在一些新型的CPU上运行,非托管应用程序通常被编译为面向具有最小通用功能的CPU平台,一般会避免使用新型CPU提供的特殊指令,而我们的JIT编译器能够检测到这种情况,并能产生利用这些特殊指令的本地代码。
还有大家都能确定的一点是,JIT编译器能检测到某些总是返回错误的布尔测试,将不会产生任何CPU指令。
最后,在程序运行时,通用语言运行时(CLR)能够分析代码的执行情况,并有选择的将IL代码编译为本地CPU指令。
综上,我觉得如果说托管代码一定比非托管代码性能低,这是不一定的,希望大家能够积极讨论我的论点的正确性。
------解决方案--------------------
众所周知,在托管环境中,代码的编译需要经过两个阶段才能完成的。首先,面向通用语言运行时的编译器扫描源代码将其编译成中间代码(IL)和元数据等组成的托管模块;其次才是在运行时通过JIT编译器即时编译为本地的CPU指令集。我们认为基于这些原因,托管代码就一定比非托管代码性能低。
多数情况下确实如此
我觉得这样的论调是不一定正确的,首先,在运行时某个方法IL代码被JIT编译器及时编译为本地CPU指令,这会产生一定的性能损失,这是肯定的,但是对该方法的后续调用都将以本地代码做全速执行,我想大家想一想也能记起来。
由于及时编译受到运行时间限制很可能比有充分时间编译的静态编译方法优化不充分
其次,如果应用程序在一些新型的CPU上运行,非托管应用程序通常被编译为面向具有最小通用功能的CPU平台,一般会避免使用新型CPU提供的特殊指令,而我们的JIT编译器能够检测到这种情况,并能产生利用这些特殊指令的本地代码。
这取决于编译器的支持,如果jit版本老旧同样不能支持新cpu,新的c编译器一样支持新cpu
还有大家都能确定的一点是,JIT编译器能检测到某些总是返回错误的布尔测试,将不会产生任何CPU指令。
检测就需要时间
最后,在程序运行时,通用语言运行时(CLR)能够分析代码的执行情况,并有选择的将IL代码编译为本地CPU指令。
同上 由于及时编译受到运行时间限制很可能比有充分时间编译的静态编译方法优化不充分
------解决方案--------------------
同意楼主的说法。
但是想补充一点,非托管代码也是有优化的,例如 Intel c++ complier, openMP 等等,而且优化的效率非常的明显。
不过这一切都是要归结到程序员会不会用这个问题上面来。
程序员的“性能”才是程序效率的关键,而不是编程语言。
------解决方案--------------------
lz的论据很对,但是结论不对。要注意普遍和一般,通常和极端,多数和少数。
这就好比新闻报道和广告词,通过选择性的事实,完全可以在所说都是正确的情况下骗你没商量。
------解决方案--------------------
我感觉C#比C++慢在大部分情况下是一定的,只是这种慢在大部分情况下是可以容忍的。
如果各方面都比C/C++好,就没有人用C/C++了。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
(VS2005)VB有关继承封装在DLL里窗体
公司里有一套自己的架构并把它封装在叫MFW的DLL里,再学习使用时发现了很多不明白的地方。例如:现...
-
如何让treeview点击结点不刷新页面?
如何让treeview点击结点不刷新页面?
------解决方案--------------------
帮你顶
------解决...
-
单薄的业务层
相信开发WEB信息的人都用到过三层架构
表示层--》业务层--》数据访问层
以前一直开发CS结构最近一年一直在开发...
-
类爆炸问题,对维护也是恶梦?
原意在ERP项目中有设计一个工序类用來描述工序:
public Process
{
public string ProcessNo
{
...
-
怎么实现随意变换网页字体?
想做个艺术签名的网站
字体也找了几个
就是在用户输入“名字”后
把“名字”转换成几个字体显示出来
...
-
关于政府部门网站数据库设计
今天上面安排让我做个政府有关部门的网站,我看了下不是很复杂。可到了设计数据库表时候碰到了些问题...
-
如何自动为录入的人员信息分配用户权限
我这里有两类人,一类是教师,一类是学生,要解决的问题是,在用管理员身份录入教师和学生信息时,...
-
Ext.Net 和ExtJS
现在在做一个项目,用到了EXT.NET 但是有个缺点就是EXT.NET里的时间选择器dateField不能选择时分秒,现在想到用EXTJ...
-
谁手里有现成的提示框样式啊,急用
谁手里有现成的提示框样式或者皮肤啊 还有弹出div层的好看一点的样式 给我个呗 我这急用呢 ...
-
求两个样式的例子...
一个是点击修改弹出修改表单表格 出现在列表上 要特别好看的那种 最好是悬浮的
一个 要弹出的确...