Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C比VB.NET快吗?_C#_Vb.net_Cil - Fatal编程技术网

C# C比VB.NET快吗?

C# C比VB.NET快吗?,c#,vb.net,cil,C#,Vb.net,Cil,你会认为两者是一样的 但可能是微软使用的编译器,但我注意到,当编译两个非常小的程序时,逻辑是相同的。VB.NET使用了更多的IL指令 c必须更快,这是真的吗?仅仅是因为它的编译器更智能。c比VB.NET更接近IL VB.NET有时会在幕后做很多事情。就像在错误恢复下一步一样,为每个语句编写一个try-catch 但总的来说,两者具有相同的特性和性能 您可以在Reflector中打开代码并将其视为C代码。了解C代码是否是您所期望的确保程序完全相同。例如,根据选项的不同,这两行实际上非常不同: Di

你会认为两者是一样的

但可能是微软使用的编译器,但我注意到,当编译两个非常小的程序时,逻辑是相同的。VB.NET使用了更多的IL指令


c必须更快,这是真的吗?仅仅是因为它的编译器更智能。

c比VB.NET更接近IL

VB.NET有时会在幕后做很多事情。就像在错误恢复下一步一样,为每个语句编写一个try-catch

但总的来说,两者具有相同的特性和性能


您可以在Reflector中打开代码并将其视为C代码。了解C代码是否是您所期望的

确保程序完全相同。例如,根据选项的不同,这两行实际上非常不同:

Dim x = "some string"

要匹配该C代码,VB应如下所示:

Dim x As String = "some string"

听起来这些差异纯粹是编译器对源代码的解释。科技共和国的一篇文章得出了几乎相同的结论:

我没有做任何测试,但我认为速度应该差不多。如果要选择编码风格和语法的话。

由于可用信息量有限,很难做出明确的回应。如果您同时提供示例和所使用的编译器选项中的代码,将会有很大帮助

不过,要回答这个问题,no-C本身并不是更快的。这两种语言都生成IL并在CLR上运行。对于大多数功能,它们甚至生成相同的IL。一些类似的特性存在差异,但它们加起来很少会带来显著的性能变化

如果遇到语言和环境中的一些细微差异,VB可能会显得较慢。几个常见的例子是

许多环境默认为VB.Net的选中整数操作,而不是C 细微的编码问题可能导致后期绑定,而这似乎是早期绑定 相信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中的等效速度

Dim value As Integer = 0
For i As Integer = 0 To NUM_ITERATIONS
  value += 1
Next
这种情况下的原因是VB的默认行为是执行溢出检查,而C不执行


我敢肯定,在表现出类似性能偏差的语言中,还有其他差异。但是,这两种语言都构建在CLR之上,并且都编译为相同的IL。因此,在不添加重要的限定条件条件Z子句的情况下,使用像语言X这样的总括语句比语言Y更快。这完全是不正确的。

更多指令并不一定意味着程序速度较慢。您确定逻辑相同吗?如果它们足够小,你能发布这两个例子吗?可能重复@Closer。。。真正地255个观点和9张赞成票,你认为这太主观了?我不认为这是主观的。事实上,我认为这是一个完全正确的问题。我投票决定关闭,因为我发现了多个完全相同的副本。C在幕后也做了很多工作,例如,使用,lock,foreach。编译器还可以极大地改变代码以提高性能。是的,但总体上比VB.NET-1更接近。关闭和收益率是否接近IL??不,编译器创建(有时包括整个新类)以支持。C与IL有很大不同,也是一件好事!人们过去常说C语言和汇编语言很接近,你是这么想的吗?我只是说它比VB.NET更接近。这并不等于IL……我也不认为这是正确的,而且不管怎样,这与C代码是否更快/更好无关。在VB中启用Option Inferre后,这些行不是太一致了吗?@Meta是的,因此使用了“依赖选项”短语。我将做两个编辑来澄清这一点:1大写选项2 var->string。@是的,它们与选项inferon相同。但这只是2008年及以后开始的新项目的默认情况。旧项目仍然使用“推断关闭”选项升级,以防止后期绑定的转换问题。
int value = 0;
for (int i = 0; i <= NUM_ITERATIONS; i++)
{
  value += 1;
}
Dim value As Integer = 0
For i As Integer = 0 To NUM_ITERATIONS
  value += 1
Next