C#代码是否比Visual Basic.NET代码更快,或者这是一个神话?C#代码比Visual Basic.NET代码更快吗?
回答
这是一个神话。他们编译到相同的CLR。然而,相同例程的编译器在CLR中可能会略有不同。因此对于某些例程,某些可能会稍微好一些,例如C#中的(0.0000001%)更快,反之亦然,但它们都运行在相同的公共运行时间,因此它们在性能方面都相同。
编译到同一个IL并不能保证应用相同的优化。你有没有提到性能会类似? – 2009-08-03 17:51:31
我同意,但有一点要注意:如果你有Option Strict off,那么你基本上会在各处做额外的转换,这往往会使代码显着变慢。你不能在C#中犯这个错误,如果你用C#重写VB.NET代码,会导致性能的提高。 – 2009-08-03 17:51:53
当然,任何值得他们的盐的开发人员都会有Option Strict On。 – 2009-08-03 17:54:01
vb.Net中的相同代码可能比c#慢的唯一原因是VB defaults to have checked
arithmetic on and c# doesn't。
默认情况下,检查Visual Basic中的算术运算和溢出;在C#中,他们不是。
如果您禁用该功能,则生成的IL可能会相同。为了测试它,需要通过Reflector运行代码,如果从c#切换到vb.Net视图,您会发现它看起来非常相似。
在c#编译器和vb.net编译器中进行优化(或者只是行为上的差异)可能会导致另一个稍微偏向另一个。这就是:
- 不太可能是显著
- ,如果它是这将是低垂的果实来解决
- 不太可能发生。
- c#和vb.net的抽象语法树在结构上非常接近。你可以自动将大量的vb.Net转换成c#,反之亦然。更重要的是,结果会成为看起来习惯的好机会。
有在C#中没有在vb.net一些结构,如不安全的指针。在哪里使用,他们可能会提供一些好处,但只有在他们被实际使用并正确使用。如果你是这样的优化,你应该适当地进行基准测试。
坦率地说,如果它使真的是真的很大的区别,那么问题不应该是“我应该使用哪个c#/ vb.net”,而应该问自己为什么不将一些代码移到C++/CLI。
我能想到的是,不同的编译器可能会引入严重的,普遍的分歧的唯一途径是,如果一个选择:
- 实现在不同的地方尾调用
- 这些可以使事情更快或速度较慢,当然会影响深度递归功能。所有平台上的4.0 JIT编译器will now respect all tail call instructions even if it has to do a lot of work to achieve it。
- 显着更高效地实现迭代器块或匿名lambda。
- 相信无论是编译器大约在较高的水平一样有效,他们将在这方面得到虽然。这两种语言都需要明确支持f#序列生成器可用的'yield foreach'风格。
- 盒装当它是没有必要的,或许通过不使用constrained opcode
- 我从来没有见过这种事情发生,但会爱它做一个例子。
无论是C#和vb.net编译器目前留下这样的优化复杂的EN-登记的变量,调用约定,内联和完全展开了在CLR的共同JIT编译器。这可能对其他任何事情有更多的影响(特别是当32位和64位JIT的行为现在完全不同时)。
该框架是用C#编写的,但仍不能说明C#或VB之间的性能差异,因为所有内容都编译为IL语言,然后实际执行(包括JITted等)。
的责任是对它们产生基于源代码什么样的IL的每个特定语言编译器。如果其他编译器生成比其他编译器更适合的IL,那么它可能会有性能差异。我不完全确切地知道这是否有这种领域会导致完全不同的IL,但我怀疑这种差异仍然很大。
其他方面完全是那么的C#的运行就像使用原始指针等,可以在特殊情况下给予表现不安全代码的能力。
在编译器优化中可能会有细微的差异,但我会说没有明显的差异。 C#和VB.NET都编译为Common Intermediate Language。在某些情况下,您可能可以通过使用unsafe code在C#中获得显着的性能提升,但在大多数情况下,我不会推荐这样做。如果你需要一些性能至关重要的东西,你也不应该使用C#。
神话可能开始是因为巨大的与平均C++应用程序相比,Visual Basic 6性能的差异。
我在参加微软会议,MS员工表示C#比VB.NET快8%。所以如果这是一个神话,那是由在MS工作的人开始的。如果我能找到说明这一点的幻灯片,我会发布它们,但这是C#刚刚出来的时候。我认为,即使在某个时间点这是事实,那么一个人比另一个人更快的唯一原因就是ShuggyCoUk所说的默认配置方式。
像往常一样的答案是,它取决于...本身,没有,VB.Net不比C#慢,至少没有你会注意到的。是的,编译器优化会有细微差别,但生成的IL将基本相同。
但是,VB.Net附带了用于VB6的程序员的兼容性库。我记得那些字符串方法,如左,右,中,旧的VB程序员会期待的。那些字符串操作函数比较慢。我不确定你会注意到一个影响,但取决于他们的使用强度,我敢打赌答案是肯定的。为什么这些方法比“native”.net字符串方法慢?因为它们的类型安全性较低。基本上,你可以向他们扔几乎任何东西,他们会尽力去做你想要的东西,就像在旧的VB6中一样。
我正在考虑字符串操作,但如果我觉得更难,我敢肯定我会记得更多的方法抛入该兼容层(我不记得程序集的名称,但记住它是默认引用的在VB.Net),如果使用,而不是他们的.net“本地”等效,将会有性能影响。
所以,如果你像VB6一样继续编程,那么你可能会注意到一个影响。如果没有,没关系。
这不是一个真正的神话。尽管C#和VB.Net都编译为IL,但生成的实际指令可能会有所不同,因为1.编译器可能有不同的优化,2. VB.Net缺省执行的额外检查算术溢出。所以在很多情况下,性能将会一样,但在某些情况下,C#会更快。在极少数情况下,VB.Net也可能会更快。
这取决于你在做什么。我认为VB和C#没有真正的区别。它们都是.Net语言,它们都是在IL中编译的。
更多信息?阅读:
有在生成的代码,可以使C#稍快一些情况下,一些小的差异。例如VB.NET有一些额外的代码来清除方法中的局部变量,而C#没有。
但是,这些差异几乎无法衡量,而且大多数代码与最佳代码差距太大,以至于您只是通过切换语言来使代码运行速度加快而开始出现错误。您可以采取任何CPU密集型代码,而且可以轻松地将其快两倍。一些代码可以快10倍,其他代码可能快10000倍。在这种情况下,使用C#而不是VB.NET可以获得的百分比不值得。
另一方面,学习C#很可能是加速代码的有效方法。不是因为C#可以生成更快的代码,而是因为您将更好地理解C#和VB.NET,使您能够编写代码,在任一种语言中执行都更好。
编辑:
C#和VB.NET编译器显然是或多或少同步开发的。 C#1和C#2之间的速度差异大约是30%,C#和VB.NET并行版本之间的差异要小得多。
C#和VB.Net都是由IL编译的。另外C++和F#也是由它编译的。事实上,我提到的四种语言都以相同的速度执行。没有一种“更快的语言”:独特的区别在于自动垃圾收集语言(C#,VB.Net,F#等)和那些不是自动收集的语言(如C++)之间。第二组通常比较慢,因为很少有开发人员知道如何以及何时在堆内存中收集垃圾,但是,如果您了解堆内存,那么如果使用C++,程序可能会更快。硬图形程序通常用C++编写(例如大多数Adobe程序)。你也可以在C#(System.GC.Collect();
)和VB.Net(System.GC.Collect
)中手动收集垃圾。 我知道这个问题并不完全是固有的,但我想给你提供很多方法和选择。你为你的节目选择正确的方式。
- 1. 优化代码:++ p比p ++更快吗?
- 2. 代码隐藏比内联代码更快吗?
- 3. Visual Basic.net代码自动截取
- 4. VB.NET代码比C#代码
- 5. 模板Metaprogramming比等效的C代码更快吗?
- 6. 纯Python比Numpy更快吗?我可以使这个numpy代码更快吗?
- 7. 即使迭代更多,为什么一个代码比其他代码更快?
- 8. NEON ASM代码运行速度比C代码慢吗?
- 9. 使c#矩阵代码更快
- 10. F#NativePtr.stackalloc比C#更快 - stackalloc - 包含反编译代码
- 11. 让Haskell代码更快更快
- 12. R中的代码更快
- 13. C#的Visual Studio代码#
- 14. Visual Studio C#代码颜色
- 15. Visual C++ 2010代码完成
- 16. 评论C++代码,visual studio
- 17. C#Math.NET Numerics中的LinearRegression代码可以更快吗?
- 18. 什么可能使非优化F#代码比优化代码更快?
- 19. 传递到C代码从C#代码在Visual Studio
- 20. 比从端点迭代ArrayList更快吗?
- 21. 在Visual Studio代码中快速搜索
- 22. 为什么C++在这段代码中比C快得多?
- 23. VB代码到C#代码
- 24. 代码在代码::块在Visual Studio 2013
- 25. 从Visual Studio中截取代码代码
- 26. Visual Studio代码JavaScript代码完成
- 27. 导入代码更改,同时比较源代码控制代码
- 28. 如何加快EmguCV C#代码中的图像匹配代码?
- 29. 我的numba代码可以比numpy快吗
- 30. 更改存根代码背后的初始Visual Studio代码?
似乎激起了一场宗教战争:) – 2009-08-04 08:01:29