App*_*ker 19 .net c# performance programming-languages
我听说C++ .NET是最快的,C#是下一个,其次是VB .NET,而Iron-Python和Boo等语言在性能方面排在最后.如果所有.NET语言编译为中间字节代码都相同,为什么性能上有差异?
对于Boo和Python来说,这是可以理解的,因为所有类型都必须在运行时进行评估.但为什么C++和C#等语言之间存在差异?
Raf*_*ler 20
Python表现更差,因为它被解释,而不是编译.它不是在运行之前转换为CIL(通用中间语言),而是在运行时转换,这显然会产生性能开销.
此外,由于IronPython是动态类型的,与静态类型语言(C++,C#,尽管有Pythonesque语法,Boo也是如此)相比,可以进行更少的优化.
您还必须考虑为每个实现进行优化所付出的努力量.C#和C++ .NET拥有庞大的团队,致力于让他们的编译器生成最快的字节码.IronPython和Boo是志愿者项目,没有那么多的人力或资源,所以他们不会像MS资助的那样迅速获得优化.
从本质上讲,语言功能在编译时和运行时都会产生性能/内存成本.这就是.NET语言性能不同的原因; 因为它们的功能各不相同.
到目前为止,所有的答案都混淆了C++和"C++ .Net"(实际上现在称为C++/CLI) - 这是两种完全独立的语言.
C++被编译为本机机器代码.C++/CLI编译为CIL(.Net)字节码.因此,C++程序往往比C++/CLI代码快一点.C++已有30年历史,并广泛应用于编程领域.另一方面,C++/CLI大约有10年的历史,并没有被广泛使用.它的主要目的是将C++程序转换为.Net更容易 - 从C++到C++/CLI比从C++转到C#要少得多.
上面的一条评论中还有另一个混淆:VB6和VB.Net之间.VB6是微软的旧VB语言,现已弃用.它被编译为本机机器代码,尽管人们普遍认为(大多数情况下)它比C++慢.VB.Net是微软的新VB语言,编译为CIL.
现在:表现.C++通常是最快的,因为它被编译为本机机器代码,并且因为人们已经在优化其编译器30年.这就是您通常会看到的视频游戏和其他高性能应用程序,但与其他语言相比,使用起来很麻烦.
在.Net语言之间,两个大的语言 - C#和VB.Net - 大多数都是性能相同的.虽然我没有基准来证明这一点,但我猜测 C++/CLI实际上稍微慢了一点,因为微软并没有过多地强调这种语言,因此可能没有那么多的程序员在优化其编译器.
IronPython由于没有专职团队来优化其编译器,因此可能是最慢的.它也运行在DLR之上,这只是另一层间接.此外,另一个答案表明它被解释,这将是一个性能杀手.