首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Foreach和For循环,用哪个?解决思路

2012-04-15 
Foreach和For循环,用哪个?看了一张帖子《看似简单 解读C 程序员最易犯 7大错误》,我对内容还是很支持的。HTML

Foreach和For循环,用哪个?
看了一张帖子《看似简单 解读C 程序员最易犯 7大错误》,我对内容还是很支持的。

HTML code
原帖:看似简单 解读C 程序员最易犯 7大错误作者:HooverHuang(蜗牛)

http://topic.csdn.net/u/20101110/14/a9c32275-5da2-4230-93eb-83a37285496d.html
其中讨论了for和foreach,说的是foreach的效率不及for。

但是后来我发现楼主的测试代码写错了。

测试foreach的时候没有重新计时,
导致foreach的时间变成了2次时间的累加,
出现了2倍的效率问题,实际上foreach和for循环的效率没有明显差距。

鉴于当前相当无聊,召集大伙儿闲谈讨论一下。

俺个人观点是:遍历尽量用foreach。
理由是,foreach能够更佳优雅的表达coder的用意。
C# code
for(var i=0;i<items.Count;i++){  var item=items[i];  //操作}

for使用大篇幅的底层运算描述,从而掩盖了coder的本质用意。

相比之下foreach可读性要强的多。
而且我认为,可读性强不止对人类有效果,
对未来的计算机来说,也可能会有帮助。

如果,使用for,面对里面的那些i=0;i++,机子只能乖乖的一步一步的执行。
而如果是foreach,放手留给机子自己优化的空间,
如果未来机子足够聪明,他有机会大展伸手,
使用多核处理,使用云计算。。。(我是不是想多了) - -b

散分。

《Csdn收音机》是个开源的辅助工具,以后学技术更方便了!

[解决办法]
foreach效率比for低主要分2个角度说。
2个地方,一个是.net 1.1之前的对值类型的装箱,一个是每次调用GetEnumator方法的函数调用带来的时间消耗,单一次都不消耗时间,但经过大量循环放大后,时间消耗比较明显。
.net 1.1之后的版本,foreach对值类型已经不装箱,不慢了,因为有了yield关键字。
但函数调用带来的堆栈创建内存分配则不可避免。
绝对意义上,for比foreach快,但从.net 1.1之后,这个差距缩小到多一层函数调用而已,不是特别严格的地方,还是用foreach好一点。因为foreach不止可以访问一个数组或List这样循环时能确定长度的集合,也可以访问可迭代的类型,对于一些不需要最开始就确定长度的,这样甚至效率更高,因为不需要在循环开始之前就准备好要循环的数据,而是每次foreach循环获取下一个数据。
其实也不用记什么情况用,多写写程序,应该不难区分用途。
[解决办法]
单纯从效率上讲区别远小于对程序产生的影响
[解决办法]

[解决办法]
这个楼主有时间可以拿个大量数据测试下,就几个数据还是看不出来的啊!测试完了发表篇博客出来瞅瞅。
给力
[解决办法]
对于小数据量的话,两者确实没什么区别,而对于大数据量的话建议使用For,原因2楼说得很清楚了
[解决办法]
能用foreach一般就懒得写for了,特别是封装的对象时,方便好多,用[]多了伤神..
至于效率也看过类似的博文,那种百万级甚至千万级执行效率的差别基本可以忽略吧
[解决办法]
学习了。。。。
[解决办法]
我个人感觉差不多,现在没时间 明天回头看看
[解决办法]
习惯用for
[解决办法]

大家可以参考下面的三篇文章:
http://blogs.msdn.com/kevin_ransom/archive/2004/04/19/116072.aspx
http://blogs.msdn.com/brada/archive/2004/04/29/123105.aspx
http://www.cnblogs.com/WuCountry/archive/2007/02/27/658710.html

[解决办法]
C# code
for (int count = 0; count < dt.Rows.Count; count++)            {                dt.Rows[count]["Name"] = "Modified in For";            }
[解决办法]
高手论道,学习了
[解决办法]
还真的没研究过他们具体的区别,只是在适当时候感觉哪个更适合自己的代码逻辑就用哪个。
今天学习了,
[解决办法]
关注
[解决办法]
其实用那个就看实际需要了。
一般情况都不用太较真了
[解决办法]
for找到你用的东西以后就可以break了
效率高些
------解决方案--------------------


差不多,还是把时间用在其他更需要研究的地方吧
[解决办法]
能用foreach 就用,不行 再用for
[解决办法]
理论上for高效些,其实没多大区别。
但编写代码是首先考虑foreach,因为他所谓优雅一些
如果foreach他确实影响了性能在考虑把它换掉。浅薄想法。
[解决办法]
用for
[解决办法]
遍历普通的集合当然用foreach,这没什么需要讨论的

但是如果是基本类型数组,而且是对执行效率要求高的场合(比如多重循环内部)
用for好些,可以用指针(unsafe代码)
[解决办法]

[解决办法]
foreach的集合项不能删除,for里面可以。
foreach看起来更面向对象一些。for更容易取到当前是第几个循环。
foreach可能会比for慢一点,但是这根本不是问题。
我从来也没遇到过在循环里面处理百万级的数据的先例。
[解决办法]
差不太多,自己觉得哪个好用就用哪个。
[解决办法]
学习ing~
[解决办法]
学习下了.

[解决办法]
我是每天回复的!
[解决办法]
foreach的可读性强
for的执行效率高

开发效率和执行效率,永远成反比!
[解决办法]
不错啊,学习了
[解决办法]
菜鸟学习了,
[解决办法]
for 比foreach在大量数据中的效率要高,小量循环的话,没有上面差别!
[解决办法]

探讨

foreach的集合项不能删除,for里面可以。
foreach看起来更面向对象一些。for更容易取到当前是第几个循环。
foreach可能会比for慢一点,但是这根本不是问题。
我从来也没遇到过在循环里面处理百万级的数据的先例。

[解决办法]
探讨
原来那样没有问题哦,本来就是2个索引器,没法子节省。
我想foreach内部也应该有一个的才对。

如果有话,就更贴对我说吧。我用《Csdn收音机》能听到哦!

[解决办法]
真是学习了啊。。。
[解决办法]
真是学习了啊。。。
[解决办法]
没有最好的,只有最合适的……
小数据量遍历用foreach
超大数据量及大里逻辑操作的用for
[解决办法]
学习~~~~~~~~~~~~~~
[解决办法]
学习了,顶你们,继续发有价值的贴
[解决办法]
都是用for
[解决办法]
感觉还是用for循环 比较好
[解决办法]
一般没什么区别,只有在数据量大的时候才可以体现出for比foreach快。。。
[解决办法]
探讨

foreach效率比for低主要分2个角度说。
2个地方,一个是.net 1.1之前的对值类型的装箱,一个是每次调用GetEnumator方法的函数调用带来的时间消耗,单一次都不消耗时间,但经过大量循环放大后,时间消耗比较明显。
.net 1.1之后的版本,foreach对值类型已经不装箱,不慢了,因为有了yield关键字。
但函数调用带来的堆栈创建内存分配则不可避免。
绝对意义上,fo……

[解决办法]
无聊,这种帖子没意思。
效率肯定是foreach好,如果需要用到index,或者删增元素,推荐使用for
------解决方案--------------------


各有千秋,分情况吧
[解决办法]
其实都可以的
[解决办法]
太厉害了 fs
[解决办法]
厉害,研究得怎么深呀。
[解决办法]
foreach让代码更优雅更美观。只读集合用foreach,需要动态修改则用for。
[解决办法]
对于对象时,比较喜欢用foreach
[解决办法]
foreach效率高,for循环每次执行必须判断是否超出范围,foreach每执行一次循环直接next,直到索引到最后,循环结束,效率高一点,当然,当数据量不大的情况,二者效率没什么差别,但是foreach条理比较清晰,尽量多用foreach
[解决办法]
学习。UP~~
[解决办法]
学习学习啊,
路漫漫其修远兮,吾将上下而求索
[解决办法]
围观了
[解决办法]
------------------
[解决办法]
我的观点也是for 比 foreach 效率高,不过重来没测试过。

热点排行