C#编译器不会优化foreach循环吗?

3
我读过许多关于在数组上 foreach 比 for 循环效率稍低的文章,因为它需要构造/使用迭代器,人们推荐使用 for 循环。
我对编译器没有优化它(即:将其转换为一个简单的 for 循环 IL 代码)有些惊讶。Visual Studio 2015 编译器为我们做了很多事情(如 C# 6 语言特性),为什么不修复这个“不太常见”的错误用法呢?

2
这听起来不太对,我会要求反对“foreach”的人支持他们的说法,而不是在SO上询问其他人。你在哪里读到这个的? - user743382
如果有可衡量的性能差异,这是否重要?与其微调循环遍历数组,我通常会首先质疑使用数组的必要性。 - Damien_The_Unbeliever
可能是在.NET中,哪个循环更快,'for'还是'foreach'?的重复问题。 - HugoRune
1个回答

4

所提及的参考仅测试了问题的一部分。循环执行的迭代次数越多,这个事实就越不明显(至少在.NET 4.5或4.7中是这样;很久以前的情况),即foreach需要初始化一个枚举器而for不需要。在List的情况下(注意:IList的性能较差),for比foreach更快。重要的是,您调用循环超过100(0)次,这样才能测量出来。如前所述,这是我在.NET 4.x中的经验。自那时以来,很多事情发生了变化,所以现在可能不同。非常重要的是:测量您的使用情况... - Daniel Bişar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接