问题描述
我从刚开始学了VC++后没有学mfc,接着自学了C#做了不少的东西,对.net也算是有点了解了。不过我总感觉用.net的程序效率不如C++的高,于是现在又回头来学mfc,才发现.net的框架做界面是多么的方便,实在不是mfc能比的,但又希望能做出高效的程序,比如运行计算量比较大的算法。在学习别人的代码,以及看到现在的程序,又有不少用VC++.net编的,不知道它是否有原来VC++那样的运行效率,而编界面方面是否比较方便。对于C#,我也不知道有什么方法能比较明显的提高运行效率。希望各位朋友能交流下经验,听听各位的看法,谢谢~
解决方案
解决方案二:
C#程序效率真的比C++低么?这似乎本身就是伪命题。托管程序在运行效率方面至少有这么几个优势:JIT编译器可以产生比C++编译器更好的本地代码,因为C++编译器编译的代码必须满足所有处理器运行的需要,而JIT可以针对运行程序的那一台计算机产生最优的代码。CLR可以智能地处理模块,在C++中程序经过静态连接,在运行的时候一次加载,而CLR可以实现按需加载,并且自动内联函数。.NET程序员可以获得更好的函数库支持,这些函数精心编写,效率很高。在C++中,程序员手工选择的算法往往不是最优的。.NET程序可以方便地为多处理器、并行、分布式环境优化,在高性能计算中,程序的伸缩性比性能更重要,这是因为同样获得两倍的运算性能,使用双CPU或者双计算机的成本要低于一台两倍速度的处理器。.NET程序更加简洁,简洁的代码意味着更高的效率和更小的存储器需求。最后,C++程序的一些“高效”是以程序根本错误为代价的,比如不正确地分配内存,没有检查下标,没有检查缓冲区,没有做线程同步,这些看似高效的代码本身是不稳定的不安全的和存在问题的,根本没有可比性。
解决方案三:
我想很多人都在说,汇编程序的效率比C++高。也许这是事实,但是我想一个汇编菜鸟现在想用汇编编写比C++更快的代码似乎已经不可能了。现代的C++编译器充分优化,现代的处理器多层缓存系统、各种指令集、寄存器重名、乱序、多发射,这些特性使得代码优化变成非常复杂的问题,菜鸟根本无法和精心设计的编译器相比。类似的,C++菜鸟真的能写出比C#程序更快的程序么?我想答案是否定的。所以所谓C++效率高只是一个遥远的传说。
解决方案四:
我觉得,站在菜鸟的角度,是没有必要谈哪个语言或者哪个开发环境效率更高的,因为你还没有精力考虑到这一步,系统0.01秒的执行时间的区别和系统运行稳定性比较起来,后者才是菜鸟该花精力考虑的,正如楼上所说,一个汇编菜鸟现在想用汇编编写比C++更快的代码似乎已经不可能了.注:本人是纯菜鸟.
解决方案五:
感谢二楼的回答,但不管程序员之间水平的差距,同样的算法,C#也可以做到和C++一样的运算速度吗,最最简单的比如:两个int相加。在运算量大的时候,比如做滤波算法什么的,我还是感觉两者有差距,有人说C#需要拆箱和封箱什么的,不知道C#在运行时是否会做一些其余的操作。在做大量运算的时候,用C#真的合适吗?
解决方案六:
引用4楼的回复:
感谢二楼的回答,但不管程序员之间水平的差距,同样的算法,C#也可以做到和C++一样的运算速度吗,最最简单的比如:两个int相加。在运算量大的时候,比如做滤波算法什么的,我还是感觉两者有差距,有人说C#需要拆箱和封箱什么的,不知道C#在运行时是否会做一些其余的操作。在做大量运算的时候,用C#真的合适吗?
单纯的运算来说,C#是不落下风的。至于复杂情况可就不好说了。