在c# / VB.NET/。哪个循环运行得更快,for还是foreach?

自从很久以前我读到for循环比foreach循环工作得快,我就认为它适用于所有集合、泛型集合、所有数组等。

我搜索了谷歌,找到了几篇文章,但大多数都是不确定的(阅读文章评论),而且是开放式的。

理想的情况是列出每种情况以及最佳解决方案。

例如(这只是一个例子):

用于迭代1000+的数组 字符串- for比foreach好 对于迭代IList(非泛型)字符串- foreach更好 比

在网上找到了一些相同的参考资料:

由Emmanuel Schanzer撰写的原创文章 CodeProject FOREACH Vs. FOR 博客——去博客还是不去博客,这是个问题 ASP。NET论坛- NET 1.1 c# for vs foreach

(编辑)

除了可读性之外,我对事实和数据真的很感兴趣。在某些应用中,最后一英里的性能优化确实很重要。


当前回答

我需要使用三个嵌套循环(在List<MyCustomType>上)对一些大型数据进行解析。我想,使用Rob Fonseca-Ensor上面的帖子,比较for和foreach的区别会很有趣。

区别在于: foreach(三个foreach嵌套,如foreach{foreach{forech{}}})在171.441秒内完成了这项工作,而for (for{for{for{}}})在158.616秒内完成了这项工作。

现在13秒大约减少了13%的时间,这对我来说有点重要。然而,foreach绝对比使用三个索引for…

其他回答

“有没有什么论据可以帮助我说服他使用for循环是可以接受的?”

不,如果你的老板事无巨细地告诉你应该使用哪种编程语言结构,你就真的没什么可说的了。对不起。

For有更简单的逻辑实现,所以它比foreach快。

在处理对象集合的情况下,foreach更好,但如果要增加一个数字,则for循环更好。

注意,在最后一种情况下,你可以这样做:

foreach (int i in Enumerable.Range(1, 10))...

但它并没有表现得更好,它实际上比for的表现更差。

for是否比foreach快确实不是重点。我非常怀疑选择其中之一会对你的表现产生重大影响。

优化应用程序的最佳方法是对实际代码进行分析。这将精确地找出占用最多工作/时间的方法。首先优化它们。如果性能仍然不能接受,请重复上述步骤。

一般来说,我建议不要进行微观优化,因为它们很少会产生任何显著的收益。唯一的例外是在优化确定的热门路径时(即,如果您的分析确定了一些高度使用的方法,那么广泛地优化这些方法可能是有意义的)。

影响性能的是您在循环中所做的事情,而不是实际的循环构造(假设您的情况不平凡)。