C#比VB.NET快吗?

Dis*_*ive 13 c# vb.net cil

你认为两者都是一样的.

但也许它是微软使用的编译器,但我注意到在编译两个非常小的程序时,相同的逻辑.VB.NET使用更多的IL指令.

是否真的比c#必须更快,只是因为它的编译器更聪明.

Jar*_*Par 15

有限的可用信息确实很难对此做出明确回应.如果您提供了样本和使用的编译器选项的代码,那将会有很大帮助.

但要回答这个问题,没有C#本身就不会更快.两种语言都生成IL并在CLR上运行.对于大多数功能,他们甚至生成相同的IL.某些类似功能存在差异,但它们很少会导致显着的性能变化.

如果遇到语言和环境中的一些细微差别,VB可能会显得较慢.一些常见的例子是......

  • 许多环境默认为VB.Net检查整数操作但不是C#
  • 微妙的编码问题可能导致后期绑定,它似乎是早期绑定
  • 相信switchSelect具有相同的语义

删除这些语言后,语言将以非常相似的性能配置文件执行.


Bri*_*eon 11

答案是肯定的,不是.这实际上取决于您所指的具体功能.同样,有些地方VB执行得更快.我可举一个例子.

VB中的这段代码......

For i As Integer = 0 To Convert.ToInt32(Math.Pow(10, 8))
Next
Run Code Online (Sandbox Code Playgroud)

...比C#中的代码快大约100倍.

for (int i = 0; i <= Convert.ToInt32(Math.Pow(10, 8)); i++)
{
}
Run Code Online (Sandbox Code Playgroud)

并不是VB编译器更好地生成for更快执行循环的代码.这是VB计算一次循环绑定,而C#计算每次迭代的循环条件.这只是语言使用方式的根本区别.

这段代码是C#...

int value = 0;
for (int i = 0; i <= NUM_ITERATIONS; i++)
{
  value += 1;
}
Run Code Online (Sandbox Code Playgroud)

...比VB中的等效物快一点.

Dim value As Integer = 0
For i As Integer = 0 To NUM_ITERATIONS
  value += 1
Next
Run Code Online (Sandbox Code Playgroud)

在这种情况下的原因是VB的默认行为是执行溢出检查,而C#不执行.

我确信在演示类似性能偏差的语言中还有其他差异.但是,这两种语言都建立在CLR之上,并且都编译为同一个IL.因此,如果不添加重要的限定条件"在情境Z"条款中,制作诸如"语言X比语言Y快"的一揽子陈述是完全错误的.


Fel*_*oto 7

C#匹配比VB.NET更接近IL

VB.NET有时在幕后做很多事情.像On Error Resume Next,为每个语句编写一个try catch

但总的来说两者都具有相同的功能和性能.

您可以在Reflector中打开代码并查看为C#代码.意识到C#代码是否符合您的预期

  • -1.闭合和"收益率"接近IL吗?不,编译器创建[load of IL](http://blogs.msdn.com/b/oldnewthing/archive/2006/08/02/686456.aspx),有时包括全新的类,以支持[一个或两个C#声明](http://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/).C#与IL有所不同,也是一件好事!人们常说**C**接近**汇编语言**,这是你在想什么? (5认同)
  • C#也在幕后做了很多,例如,`using`,`lock`,`foreach`.编译器还可以显着改变您的代码以提高性能. (2认同)