社区
C#
帖子详情
for 和foreach性能比较
crystalreport20xx
2005-12-30 11:19:02
一直想知道那个的运行速度比较快。请帮个忙
...全文
4734
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)
foreach
、while、for
性能
比较
foreach
、while、for
性能
比较
for和
foreach
性能
比较
for和
foreach
性能
比较
在很多情况下for和
foreach
具有同样的功能,选择for还是
foreach
很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来
比较
他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境: 硬件环境: PIII800 + CPU456 软件环境: VisualStudio.Net + C#测试用例:
.NET中for和
foreach
性能
比较
,for比
foreach
快,是我测试错了还是网上说错了?
1、空运行的
比较
image.png 2、读取内容
比较
image.png 3、写代码
比较
image.png 总结:别的语言的
foreach
是不是比for快我不知道,但是.NET中
foreach
没有比for快。如有不对的地方欢迎大家指教。 网上还说for可以操作数据,
foreach
不能。这里我要补充一下,以免小白误解...
Js
性能
优化:循环正序和倒序的
性能
差异,以及for和
foreach
的
性能
比较
1.正序和倒序,倒序循环是编程语言中常用的
性能
优化方法 通常不会感觉到
性能
差异,但是在数据量很大时中,比如下面的代码: var arr=[] for (var i = 0; i < 1000000; i++) { arr[i] = i; } var start = +new Date(); for (var j = 0; j < arr.length; j++) { arr[j]...
C# 中 for和
foreach
性能
比较
,提高编程
性能
From: http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html 在很多情况下for和
foreach
具有同样的功能,选择for还是
foreach
很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来
比较
他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境: 硬件环境: PIII800
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章