C#代码比VisualBasic.NET代码快吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

C#代码比VisualBasic.NET代码快吗?

提问于
用户回答回答于

这是一个神话。他们编译到相同的CLR。然而,相同例程的编译器在CLR中可能会略有不同。因此对于某些例程,某些可能会稍微好一些,例如C#中的(0.0000001%)更快,反之亦然,但它们都运行在相同的公共运行时间,因此它们在性能方面都相同。

用户回答回答于

vb.Net中的相同代码可能比c#慢的唯一原因是VB 默认有checked算术运算,而c#则没有

默认情况下,检查Visual Basic中的算术运算和溢出; 在C#中,他们不是。

如果你禁用它,那么产生的IL可能是相同的。为了测试它,需要通过Reflector运行代码,如果从c#切换到vb.Net视图,您会发现它看起来非常相似。

在c#编译器和vb.net编译器中进行优化(或者只是行为上的差异)可能会导致另一个稍微偏向另一个。这是:

  1. 不太可能是重要的
    • 如果是这样的话,那将是一笔不小的成果
  2. 不太可能发生。
    • c#和vb.net的抽象语法树在结构上非常接近。你可以自动将大量的vb.Net转换成c#,反之亦然。更重要的是,结果会成为看起来习惯的好机会。

在c#中有一些不在vb.net中的构造,例如不安全的指针。在哪里使用,他们可能会提供一些好处,但只有在他们被实际使用并正确使用。如果你是这样的优化,你应该适当地进行基准测试。 坦率地说,如果它使一个真正的大的差异,则问题不应该是“哪个C#/ vb.net我应该用”你应该不是问自己,为什么你没有到C ++ / CLI还可以将一些代码。

我能想到的唯一方式是不同的编译器可能引入严重的,普遍的差异,如果选择了:

  1. 在不同的地方实施尾巴调用

  2. 更有效地实现迭代器块或匿名lambda表达式。
    • 我相信这两位编译人员在这方面都能达到高效率。这两种语言都需要明确支持f#序列生成器可用的'yield foreach'风格。

  3. 在没有必要的情况下装箱,也许不使用受约束的操作码
    • 我从来没有见过这样的事情,但会喜欢它的一个例子。

C#和vb.net编译器目前都保留了优化的复杂性,如变量的注册,调用约定,内联和展开,直到CLR中的通用JIT编译器。这可能对其他任何事情有更多的影响(特别是当32位和64位JIT的行为现在完全不同时)。

扫码关注云+社区