Nic*_*rdi 53
这是一个神话.他们编译成同一个CLR.但是,相同例程的编译器在CLR中可能略有不同.因此对于某些例程,对于VB.NET,某些例程可能稍微好一点(0.0000001%),反之亦然,但它们都运行在相同的公共运行时,因此它们在性能相同时都是相同的.
Shu*_*oUk 26
vb.Net中相同代码可能比c#慢的唯一原因是VB 默认checked启用算术运算而c#不运行.
默认情况下,检查Visual Basic中的算术运算和溢出; 在c#中,它们不是.
如果禁用它,那么生成的IL可能是相同的.要对此进行测试,请使用代码并通过Reflector运行它,如果从c#切换到vb.Net视图,您将看到它看起来非常相似.
c#编译器中的优化(或只是行为上的差异)可能与vb.net编译器相比可能导致一个稍微偏向另一个.这是:
c#中的一些构造不在vb.net中,例如不安全的指针.使用时,它们可能会提供一些好处,但只有在它们实际使用的情况下才能正常使用.如果您需要进行这种优化,那么您应该适当地进行基准测试.
坦率地说,如果它使一个真正的大的差异,则问题不应该是"哪个C#/ vb.net我应该用"你应该不是问自己,为什么你没有到C++/CLI还可以将一些代码.
我能想到不同的编译器可以引入严重的,普遍的差异的唯一方法是,如果有人选择:
c#和vb.net编译器目前都存在这样的优化复杂性,如注册变量,调用约定,内联和展开完全取决于CLR中的通用JIT编译器.这可能会对其他任何事情产生更大的影响(特别是当32位和64位JIT现在可以表现得完全不同时).
该框架是用C#编写的,但仍然没有告诉C#或VB之间的性能差异,因为所有内容都被编译为IL语言,然后实际执行(包括JITted等).
责任在于每个特定的语言编译器,它们基于源代码生成什么样的IL.如果其他编译器产生比其他编译器更适合的IL,则它可能具有性能差异.我不知道究竟是否存在这样一个区域,它们会造成完全不同的IL,但我怀疑差异仍然很大.
其他方面完全是C#运行不安全代码的能力,比如使用可以在特殊情况下提供性能的原始指针等.
| 归档时间: |
|
| 查看次数: |
14701 次 |
| 最近记录: |