C#比VB.NET快吗?

时间:2010-10-01 02:06:53

标签: c# vb.net cil

你认为两者都是一样的。

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

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

6 个答案:

答案 0 :(得分:15)

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

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

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

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

一旦删除这些语言,语言就会执行非常相似的性能配置文件。

答案 1 :(得分:9)

答案是肯定的,不是。这实际上取决于您所指的具体功能。同样,有些地方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编译器更好地生成更快地执行for循环的代码。这是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快”的一揽子陈述是完全错误的。

答案 2 :(得分:7)

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

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

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

您可以在Reflector中打开代码并查看为C#代码。了解C#代码是否符合预期

答案 3 :(得分:3)

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

Dim x = "some string"

string x = "some string";

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

Dim x As String = "some string"

答案 4 :(得分:2)

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

答案 5 :(得分:-1)

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