为什么.net语言的性能不同?

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语言性能不同的原因; 因为它们的功能各不相同.


Blu*_*eft 8

到目前为止,所有的答案都混淆了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之上,这只是另一层间接.此外,另一个答案表明它被解释,这将是一个性能杀手.

  • 稍微纠正,VB6并不总是编译为原生,仍然有P-Code的选项.P-Code通常比本机慢,但我认为当P-Code可能更快时会有一些特定的情况. (2认同)

Ric*_*ell 7

请记住,与C#或VB.Net不同,并非所有使用Visual Studio .Net创建的C++程序都使用.Net框架.你也可以使用它创建直接的C++程序,速度非常快.