本帖最后由 马振伟 于 2014-7-30 13:12 编辑
这个最好自己测测就会知道的,用一个大数据的集合或者数组什么的,一个for一个foreach。可以发现for比foreach要快的,foreach遍历的时候,采用的是移动指针(MoveNext),一次移动的一个长度(相对于被遍历的对象长度来说),就这一点,速度是很快的,C#本身没法随便使用指针,for循环是每次根据当前索引相对于0索引的偏移去计算地址的偏移,然后根据首地址来计算实际的地址,单纯这样看,for循环肯定慢。但是foreach并不是直接遍历的源集合,而是将源集合的每个值拷贝到栈上(对于引用类型,拷贝的是对象的地址),我们在遍历的是这个拷贝(这就是为什么不能再foreach中更改源集合的理由,因为你拿到的已经不是源集合了),这个拷贝的时间导致foreach在速度上一般会输给普通的for循环 |