社区
C#
帖子详情
for 和foreach性能比较
crystalreport20xx
2005-12-30 11:19:02
一直想知道那个的运行速度比较快。请帮个忙
...全文
4910
29
打赏
收藏
for 和foreach性能比较
一直想知道那个的运行速度比较快。请帮个忙
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Macosx
2006-01-01
打赏
举报
回复
能用foreach就用foreach
aSalt
2006-01-01
打赏
举报
回复
想起哪个用哪个呗,
我一般在数组中用for
在集合中用foreach
lowtemper
2005-12-31
打赏
举报
回复
感觉foreach代码要少写一写
其他没什么感觉
zengj
2005-12-31
打赏
举报
回复
同意tiaoci(我挑刺,我快乐)的说法.
两都各有处长,要看怎么用...
如果只是拿for与foreach来作循环的话,应该for比较快,
如果涉及到取collection里面的数据的话,感觉用foreach去取会比较快...
个人感觉,一会我试一下...
没有测过,不知道到底结果如果...呵呵
真相重于对错
2005-12-31
打赏
举报
回复
既然要测试for与foreach的性能,那循环之间的运行时间必须要求一致,否则算什么比较,诸如楼上诸位
string strCount = this.textBox1.Text;
int nCount = int.Parse( strCount );
string[] arrStr = new string[nCount];
int n=1000000;
DateTime dtforstart = DateTime.Now;
for( int i=0 ; i<nCount ; i++ )
{
while( n > 0 )
{
n--;
}
}
DateTime dtforend = DateTime.Now;
System.TimeSpan tsfor = dtforend - dtforstart;
this.label1.Text = "for:"+tsfor.Milliseconds.ToString();
n=1000000;
DateTime dtforeachstart = DateTime.Now;
foreach( string str in arrStr )
{
while( n > 0 )
{
n--;
}
}
DateTime dtforeachend = DateTime.Now;
System.TimeSpan tsforeach = dtforeachend - dtforeachstart;
this.label2.Text = "foreach:"+tsforeach.Milliseconds.ToString();
jackyshower
2005-12-31
打赏
举报
回复
Foreach的语句执行效率比for高 //Foreach遍历变量 只读!
Ivony
2005-12-31
打赏
举报
回复
to Ivony()
既然你都知道foreach用的是IEnumerator对象来索引,关键看这个对象是怎么索引的。
那怎么不去看看代码?真搞笑,不懂乱说
=============================================================
你才搞笑呢,谁告诉你怎么看接口的实现了?
它是一个接口,不同的容器都有不同的实现,我在这里写一个实现你能看到啊?
tiaoci
2005-12-31
打赏
举报
回复
都TMD瞎扯,说foreach的去循环测测
double [] a = new double[100000];
两者各有优点,要看实际情况的
exboy
2005-12-30
打赏
举报
回复
有很多测试,多测试出 foreach 比 for 的性能要好点
fkphp
2005-12-30
打赏
举报
回复
forearch比for快N倍!!!
Aallonlin
2005-12-30
打赏
举报
回复
(引用)
在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。
测试环境:
硬件环境: PIII800 + CPU456
软件环境: VisualStudio.Net + C#
测试用例:
利用结果集来存放记录,初始化对结果集添加记录
分别对记录数为10000,100000,1000000条记录的时候进行采样分析
关键测试对比代码如下,功能完全一样:
//foreach开始时间
datetime3 = System.DateTime.Now.TimeOfDay.ToString();
foreach(DataRow row in relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows)
buffer = row[RelationData.PK_TABLE_NAME].ToString();
datetime4 = System.DateTime.Now.TimeOfDay.ToString();
//for开始时间
datetime5 = System.DateTime.Now.TimeOfDay.ToString();
for(int j=0;j<1000000;j++)
buffer = relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows[j][RelationData.PK_TABLE_NAME].ToString();
datetime6 = System.DateTime.Now.TimeOfDay.ToString();
测试结果:
10000条记录时:
foreach读取时间:16:29:34.2577584
foreach结束时间:16:29:34.2677728
for读取开始时间:16:29:34.2677728
for读取结束时间:16:29:34.2878016
100000条记录时:
foreach读取时间:16:31:10.1055808
foreach结束时间:16:31:10.1957104
for读取开始时间:16:31:10.1957104
for读取结束时间:16:31:10.4460704
1000000条记录时:
foreach读取时间:16:33:12.6217504
foreach结束时间:16:33:13.6332048
for读取开始时间:16:33:13.6332048
for读取结束时间:16:33:18.7906208
结果分析:
1)对于10000条记录可以看出
foreach用了 0.0100144
for循环用了0.0300432
foreach所花的时间正好是for循环的 1/3
2)对于100000条记录可以看出
foreach用了0.0901296
for循环用了0.2503600
foreach所花的时间是for循环的 36%
3)对于1000000条记录结果可以看出
foreach用了1.0114544
for循环用了4.1574160
foreach所花的时间是for循环的 25%
通过对这些测试结果的分析,可以看出相对于原来的for语句foreach具有
更好的执行效率,foreach的平均花费时间只有for30%。通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach.在测试同时
我们附加的发现,用for写入数据时间大约是读取数据时间的10倍左右.:P
作者/来源未知,,应该是csdn的吧.
foreach只是for一个封装而已,内部调用的for
并不一定是这样的吧??从哪看出来呢??
如果通过反编译来看foreach的代码,,似乎不太合理,
因为,反编译器也有自己的反编译的机制..
个人看法.
Aallonlin
2005-12-30
打赏
举报
回复
如果要测试,最好用object类型的,不要用value的,
因为有box/unbox的问题.
个人看法.
Aallonlin
2005-12-30
打赏
举报
回复
一般情况下,foreach的效率是比for的高,问什么呢?
比如for(int i=0; i<55; i++)
{
arrayList.Add(array[i]);
}
在这里,运行是要附加做一些事: 判断i是不是超出array数组的index的范围(上下标),超出,则exception
然后才取array[i]
在foreach循环中,,直接就是在一个集合里去数据,,无需判断下标什么的,所一要快一些.
在使用foreach的时候要注意的是:在遍历集合的时候,不能对集合进行真删操作,,否则会exception
shrinerain
2005-12-30
打赏
举报
回复
foreach只是for一个封装而已,内部调用的for
veryhappy
2005-12-30
打赏
举报
回复
肯定相差非常小
sylmoon
2005-12-30
打赏
举报
回复
要看场合吧
真相重于对错
2005-12-30
打赏
举报
回复
for 快
echoxue
2005-12-30
打赏
举报
回复
xuexi
diandian82
2005-12-30
打赏
举报
回复
不知道哪个快了
hydonlee
2005-12-30
打赏
举报
回复
应该是没有什么区别的.
唯一的可能就是foreach在编译器级的优化可能会导致foreah会快一点点...
先占个位子, 今天晚上回家再做详细分析.
加载更多回复(9)
for和
foreach
性能
比较
本文通过实际测试对比了C#中
foreach
与for循环在处理大量数据时的执行效率,并得出
foreach
具有更高效率的结论。
Java中for、
foreach
、stream区别和
性能
比较
本文分析了Java中for、
forEach
、stream().
forEach
和parallelStream在不同数据量下的
性能
,指出stream().
forEach
适用于流式操作,
forEach
适合顺序遍历,而parallelStream在大数据并行处理中更高效。
Java for循环和
foreach
循环的
性能
比较
本文通过实验对比了普通for循环与
foreach
循环在ArrayList与LinkList上的
性能
差异。结果显示,在数组结构上,for循环略胜一筹;而在链表结构上,
foreach
循环更为合适。
javascript的map和
forEach
,for
性能
比较
本文通过实际测试
比较
了JavaScript中不同遍历方法的
性能
表现,包括for循环、
forEach
及map等,揭示了它们之间的速度差异及其原因。
JavaScript 中 for 循环、for...of、
forEach
、map、filter 和 reduce 的
性能
比较
本文详细
比较
了 JavaScript 中 for 循环、for...of、
forEach
、map、filter 和 reduce 等遍历方式。介绍了各方式的优缺点,通过基准测试得出
性能
排序,分析了
性能
差异原因,还给出使用建议,强调理解底层实现和适用场景对编写高效优雅代码的重要性。
C#
111,129
社区成员
642,532
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章