Microsoft文档:“代码审查:.NET应用程序性能”(http://msdn.microsoft.com/en-us/library/ff647802.aspx)建议使用“for”循环而不是foreach循环来提高性能。
你使用foreach吗?
使用foreach会因此而导致额外的开销 枚举在.NET Framework集合中实现。 。净 Framework 1.1集合为foreach提供了一个枚举器 通过覆盖IEnumerable.GetEnumerator来使用的语句 的 ...
考虑使用for循环而不是foreach来提高迭代.NET Framework集合的性能,这些集合可以用整数索引。
每次用户在循环中单击网格中的行时,我的应用程序都会进行昂贵的调用。 从浮点值转换为将在显示器中可视化的Color的大约200万次迭代。
我不确定使用for循环而不是foreach循环,因为Resharper会在每个for循环中发出警告,这可以转换为foreach循环。
1。为什么Resharper推荐foreach而不是Loop?
2.用于循环是否安全?
答案 0 :(得分:2)
答案 1 :(得分:2)
由于您提到了大量迭代的性能问题 - 是的,foreach
可能比for
慢。您需要测量迭代的两个版本,并在特定情况下查看for
对于一个关键迭代是否确实更快。如果您发现for
更快(对您的程序更重要),您可以抑制该特定循环的R#警告。
请注意,foreach
不需要提前知道收集的长度。将您的传入数据转换为某种流式序列(即IEnumerable<T>
或Stream
或其中一个读者类)可能会有所帮助,并使用foreach
进行处理,直到您到达终点而不是加载首先是整个序列,然后迭代结果。这对于大量数据(即解压缩可能不适合存储器的大图像)更为重要。
答案 2 :(得分:1)
我相信这是因为与foreach
相比,for
更具说明性,并且包含更少的混乱和簿记。同样正如@TimSchmelter在评论中所说,它更灵活,因为它不仅仅是可索引的集合。不过,这只是风格(和代码可读性/可维护性)的问题。
定义“安全”。只要您遍历可索引集合(数组,列表......),for
就可以完成工作。