社区
C#
帖子详情
for 和foreach性能比较
crystalreport20xx
2005-12-30 11:19:02
一直想知道那个的运行速度比较快。请帮个忙
...全文
4753
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
性能
比较
64位JDK1.5 for windows
windows操作系统的64位JDK1.5
JMeter接口与
性能
测试项目实战
第1章JMeter接口测试1-1接口、接口测试、接口测试意义、必备技能1-2接口测试流程、JMeter简介1-3JMeter元素介绍、作用域、HTTP协议1-4HTTP协议续、测试HTTP GET1-5测试HTTP POST1-6参数化、CSV Data Set Config1-7使用__CSVRead函数参数化1-8CSVRead使用别名、参数文件路径参数化1-9断言概念、响应断言1-10JSON、JSONPath、Dummy1-11JSON断言1-12JMeter正则表达式介绍1-13关联定义原理、数据特征、提取器1-14使用正则表达式提取器关联1-15使用JSON提取器关联1-16Web服务器介绍、测试Web服务1-17JDBC连接、JDBC请求1-18数据库参数化使用
foreach
1-19数据库参数化使用计数器1-20JMeter事务1-21JMeter集合点第2章 JMeter
性能
测试实战 2-1jmeter
性能
测试-
性能
知识点导读2-2jmeter
性能
测试-线程组的设置和聚合报告简析2-3jmeter
性能
测试-tps、服务器资源等监听器2-4jmeter
性能
测试-同步定时器模拟并发压测2-5jmeter
性能
测试-分布式压测2-6jmeter
性能
测试-jmeter+influxdb
WPF多线程演示
WPF多线程演示
wpf下多线程的例子
wpf下多线程的例子
C#
110,825
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章