你可能认为两者是相同的。
但也许是微软使用的编译器不同,我注意到当编译两个非常小的程序时,逻辑相同。VB.NET 使用更多的 IL 指令。
那么,是否真的意味着 C# 必须更快,仅因为它的编译器更聪明呢?
你可能认为两者是相同的。
但也许是微软使用的编译器不同,我注意到当编译两个非常小的程序时,逻辑相同。VB.NET 使用更多的 IL 指令。
那么,是否真的意味着 C# 必须更快,仅因为它的编译器更聪明呢?
根据提供的有限信息来回答这个问题确实很困难。如果您提供了两个样本的代码和编译器选项,那么将有助于解答。
不过,简单回答一下,C#并不天生更快。两种语言都生成IL并在CLR上运行。对于大多数特性,它们甚至生成相同的IL。虽然某些类似特性存在差异,但它们很少会造成显著的性能变化。
如果遇到语言和环境中的一些微妙差异,VB可能看起来较慢。一些常见的例子包括...
switch
和Select
具有相同的语义一旦解决了这些问题,这些语言的性能表现非常相似。
答案是肯定的和否定的。这真的取决于您所指的特定功能。同样,有些地方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语言更快”的概括性陈述就是不正确的。C#更接近于IL(Intermediate Language,中间语言)而不是VB.NET。
VB.NET有时会在幕后执行许多操作。例如On Error Resume Next,它为每个语句编写了一个try catch块。
但总的来说,两者具有相同的功能和性能。
您可以在Reflector中打开代码并查看其C#代码。请注意C#代码是否符合您的预期。
using
、lock
、foreach
。编译器还可以大幅改变您的代码以提高性能。 - ChaosPandionyield return
与IL(Intermediate Language中间语言)接近吗?不是的,编译器会创建大量的IL,有时甚至包括整个新类来支持一个或两个C#语句。C#与IL非常不同,而这也是好事!人们曾经说C接近于汇编语言,这是你考虑的吗? - MarkJ请确保这些程序确实是完全相同的。例如,根据选项,以下两行实际上是非常不同的:
Dim x = "some string"
.
string x = "some string";
Dim x As String = "some string"
看起来差异纯粹在编译器对源代码的解释上。一篇 Tech Republic 的文章得出了基本相同的结论: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1027686.html
我没有做过任何测试,但我认为速度应该差不多。如果有什么区别,就选择编码风格和语法。