C#比VB.NET快吗?

你认为两者都是一样的。

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

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

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

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

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

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

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

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

VB中的这段代码……

 For i As Integer = 0 To Convert.ToInt32(Math.Pow(10, 8)) Next 

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

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

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

这段代码是C#...

 int value = 0; for (int i = 0; i <= NUM_ITERATIONS; i++) { value += 1; } 

...比VB中的等效值略快。

 Dim value As Integer = 0 For i As Integer = 0 To NUM_ITERATIONS value += 1 Next 

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

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

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

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

但总的来说两者都具有相同的function和性能。

您可以在Reflector中打开代码并将其视为C#代码。 意识到C#代码是否符合您的预期

确保程序真的完全相同。 例如,根据Options,这两行实际上是非常不同的:

 Dim x = "some string" 

 string x = "some string"; 

要匹配该C#代码,VB应如下所示:

 Dim x As String = "some string" 

听起来差异纯粹是编译器对源代码的解释。 一篇科技共和国文章得出了几乎相同的结论: https : //web.archive.org/web/1/http : //articles.techrepublic%2ecom%2ecom/5100-10878_11-1027686.html

我没有做过任何测试,但我认为速度大致相同。 如果有什么选择编码风格和语法。