你认为两者都是一样的。
但也许这是微软使用的编译器,但我注意到在编译两个非常小的程序时,相同的逻辑。 VB.NET使用更多的IL指令。
是否真的比c#必须更快,只是因为它的编译器更聪明。
答案 0 :(得分:15)
对于有限的可用信息量,确实很难做出明确的回应。如果您提供了样本和使用的编译器选项的代码,那将会有很大帮助。
要回答这个问题,没有C#本身并不快。两种语言都生成IL并在CLR上运行。对于大多数功能,他们甚至生成相同的IL。某些类似功能存在差异,但它们很少会导致显着的性能变化。
如果您遇到语言和环境中的一些细微差别,VB可能会显得较慢。一些常见的例子是......switch
和Select
具有相同的语义一旦删除这些语言,语言就会执行非常相似的性能配置文件。
答案 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)
我没有做过任何测试,但我认为速度大致相同。如果有什么选择编码风格和语法。