C# 为什么.net语言的性能不同? 我听说C++最快,C是其次,其次是VB.NET,而像Python和BoO这样的语言在性能方面是最后一个。如果所有.NET语言都编译为相同的中间字节码,为什么性能会有差异
Boo和Python可以理解,因为所有类型都必须在运行时进行评估。但是为什么C++和C语言之间的区别?< p>记住,与C语言或VB .NET不同,不是所有VisualStudio.NET创建的C++程序都使用.NETFramework。你也可以用非常快的方法创建直的C++程序。 python的解释更糟,而不是编译。它不是在运行之前转换为CIL(公共中间语言),而是在运行时转换,这显然会带来性能开销C# 为什么.net语言的性能不同? 我听说C++最快,C是其次,其次是VB.NET,而像Python和BoO这样的语言在性能方面是最后一个。如果所有.NET语言都编译为相同的中间字节码,为什么性能会有差异,c#,.net,performance,programming-languages,C#,.net,Performance,Programming Languages,Boo和Python可以理解,因为所有类型都必须在运行时进行评估。但是为什么C++和C语言之间的区别?< p>记住,与C语言或VB .NET不同,不是所有VisualStudio.NET创建的C++程序都使用.NETFramework。你也可以用非常快的方法创建直的C++程序。 python的解释更糟,而不是编译。它不是在运行之前转换为CIL(公共中间语言),而是在运行时转换,这显然会带来性能开销 也可以,因为IrPython是动态类型的,所以与静态类型语言相比,可以进行更少的优化(C++、C
也可以,因为IrPython是动态类型的,所以与静态类型语言相比,可以进行更少的优化(C++、C、以及PythOngic语法,也就是BoO)。
您还必须考虑对每个实现进行优化的工作量。C++和C+.NET在微软有庞大的团队,致力于使编译器生成最快的字节码。IronPython和Boo都是志愿者项目,没有那么多的人力或资源,因此它们不会像微软资助的项目那样快速获得优化
从本质上讲,语言特性在编译时和运行时都会有性能/内存开销。这就是.NET语言在性能上不同的原因;因为它们在特性上不同。有时看起来相当的操作实际上可能需要一些额外的工作(由编译器自动完成),以符合语言要求。例如,在VB中,有一些怪癖,比如每当你捕捉到一个异常,它就会更新;当你用“<代码>对象< /Cord>变量”做任何事情时,它调用一个拷贝,以防它是一个值类型。 到目前为止,所有答案都混淆了C++和“C++ +.net”(实际上现在被调用)——这是两种完全分离的语言。 编译为本机机器代码。C++/CLI编译为(.Net)字节码。正因为如此,C++程序往往比C++ +CLI代码快一点。C++是大约30年的,在编程世界中被广泛使用。另一方面,C++/CLI大约有10年的历史,并没有得到广泛的应用。它的主要目的是使C++程序在.NET上的翻译变得更加容易,从C++到C++/CLI比从C++到C++的工作要少得多。 在上面的一条评论中还有另一个混淆:VB6和VB.Net之间。VB6是微软的旧VB语言,现在已被弃用。它被编译成本机代码,尽管有一种普遍的信念(大部分是真的),它比C++慢。Net是微软新的VB语言,编译成CIL 现在:表演。C++通常是最快的,因为它被编译成本机代码,并且因为人们已经在优化编译器30年了。这是你通常会看到的视频游戏和其他高性能应用程序的编写语言,但是,与其他语言相比,使用它是一种痛苦 在.Net语言之间,两大语言C#和VB.Net在性能方面基本相同。虽然我没有任何基准来证明这一点,但我想C++/CLI实际上稍微慢一点,原因很简单,因为微软没有对该语言给予太多的重视,所以可能没有那么多程序员致力于优化其编译器
IronPython,因为它没有一个全职的团队来优化它的编译器,可能是速度最慢的。它也运行在上面,这只是间接的另一层。另外,另一个答案说明它被解释为一个性能杀手。< P> C++中的C++本能,将导致比C语言中的C语言本能更快的代码,例如当循环通过数据时。当然,您可以使用不安全的C#代码来完成同样的任务,也可以在C++/cli中使用数组,但是如果您遵循相当标准的语言范例,在正确的情况下可能会有巨大的性能差异,例如,在大量数据访问的紧循环中,10比1 C++/cli中的C++范例
char * position = start;
char * end = position + data_count;
while ( position < start ) {
{ do stuff with the data )
position ++;
}
char*位置=开始;
字符*结束=位置+数据\计数;
while(位置<开始){
{处理数据)
位置++;
}
C#范式
for(int i=0;i
使用disassembly窗口,您将看到这些文件的编译方式有多么不同
除了这些编程范例问题之外,可能还有实际的编译器问题,但我对此一无所知。我很好奇,您所听到的关于性能的消息来源是什么。我也不会假设,因为所有.NET语言都编译到IL,所以它们都编译到相同的IL。您可以在几十个wa中执行相同的操作任何语言中的ys-IL也不例外。C#和VB之间没有性能差异。NETLanguage的性能非常主观。写得不好的CLI会比写得好的C#执行得慢。我的来源通常是各种网站上的博客和文章,请稍等,我会尝试查找它们。比较语言速度可能会有帮助有些语言在某些领域有优势,而有些语言则更快地做其他事情。程序员也有很多事情要做。我明白了。因此,C类类的委托和事件的高级特征需要更多的内存,并编译成比C++等价的更多字节代码。@ BurnPojDigy这取决于。我想象一些C语言的FEA。相比于C++的功能,REST的资源密集性更强,但我不能说出具体的功能是否更需要一些(如代表或E)。
for ( int i = 0 ; i < count; i ++ ) {
{ do stuff with data[i] )
}