Must know something of everything and everything of something!

for与foreach 执行效率测试结果(转)

上一篇 / 下一篇  2007-04-16 14:01:40 / 个人分类:Testing

for与foreach 执行效率测试结果(转)51Testing软件测试网d'X)I&ER"v#L
 51Testing软件测试网/C:q,gWR$W @2kr u

51Testing软件测试网2MJi.Y*z

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。

.Gp-qSu/M2E6_Dl051Testing软件测试网[R,m3iU-aU;h

测试环境:51Testing软件测试网}7d0GMN-d
硬件环境: PIII800 CPU45651Testing软件测试网6nVxi8}X0\
软件环境: VisualStudio.Net C#51Testing软件测试网qMU(AFCi;S

51Testing软件测试网kU9h?7XoM8M

测试用例:51Testing软件测试网mk@2hu ^ Q
利用结果集来存放记录,初始化对结果集添加记录
6pUb ]/y5h0分别对记录数为10000,100000,1000000条记录的时候进行采样分析

y9op9sD9]7~tN051Testing软件测试网$qkN8S ~f1u}

关键测试对比代码如下,功能完全一样:51Testing软件测试网nI'k/JGW+cT
//foreach开始时间51Testing软件测试网ZdZp)R dLs/w
datetime3 = System.DateTime.Now.TimeOfDay.ToString();
3J-}tA4Z0foreach(DataRow row in relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows)
n/@Gn6Y C$iuV0{0buffer = row[RelationData.PK_TABLE_NAME].ToString();51Testing软件测试网1j n2D3|*lF.Mh-O
datetime4 = System.DateTime.Now.TimeOfDay.ToString();51Testing软件测试网di xN n0Vw#zL!Q"h

0| N1@ o v.?6r4H0//for开始时间51Testing软件测试网] [$j-B6C,n\w
datetime5 = System.DateTime.Now.TimeOfDay.ToString();
JcZ,D;E@6|.NipC0for(int j=0;j<1000000;j )
M M3{%iyIk0buffer = relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows[j][RelationData.PK_TABLE_NAME].ToString();51Testing软件测试网|R1e { eI"mI
datetime6 = System.DateTime.Now.TimeOfDay.ToString();51Testing软件测试网 Tw4\9Z7h0In

c2JEoT5HcN ]7pB6d0测试结果:51Testing软件测试网3L2v Jsw Qvo6}
10000条记录时:
X3qUq$a/b8{p)Y0foreach读取时间:16:29:34.257758451Testing软件测试网.G(y]oGX o2n
foreach结束时间:16:29:34.267772851Testing软件测试网)[ J7` [hf8J
for读取开始时间:16:29:34.267772851Testing软件测试网nb9L2V m.]
for读取结束时间:16:29:34.287801651Testing软件测试网8Y#[-D3w.uknQ
100000条记录时:51Testing软件测试网Q id6l!V#a4q.Mu#T
foreach读取时间:16:31:10.105580851Testing软件测试网a {Q zE
foreach结束时间:16:31:10.195710451Testing软件测试网bo7x%QVKf6b
for读取开始时间:16:31:10.195710451Testing软件测试网7W ~EW6f%T
for读取结束时间:16:31:10.4460704
Q5H)]6v&L0H01000000条记录时:51Testing软件测试网8O4tl*w(@ ckJ
foreach读取时间:16:33:12.6217504
2jMpJd;D0foreach结束时间:16:33:13.633204851Testing软件测试网[Up'~:Q'st
for读取开始时间:16:33:13.6332048
6`r|5B3O |0for读取结束时间:16:33:18.790620851Testing软件测试网\7a^2a8]5e6og

H2h b.p(n4N0结果分析:
,]`"V$N._GjF01)对于10000条记录可以看出
UYLVC kw0foreach用了 0.010014451Testing软件测试网 qp8XF/NYYv
for循环用了0.030043251Testing软件测试网:l [J4hY y
foreach所花的时间正好是for循环的 1/3
x HnHJ8u Z lsw02)对于100000条记录可以看出51Testing软件测试网mh z7C&z7jD cQ
foreach用了0.0901296
(Xe$Qo.R$f5m0for循环用了0.2503600
eJ;A[D]8Z1XFw0foreach所花的时间是for循环的 36%
{WH E7^03)对于1000000条记录结果可以看出51Testing软件测试网#|\4Ym&}0}n
foreach用了1.011454451Testing软件测试网 Ng_1D`E|(_9Q6Ej-~
for循环用了4.157416051Testing软件测试网6tU0K"r#t+M(R!?"B
foreach所花的时间是for循环的 25%51Testing软件测试网-BY T m`4Y

51Testing软件测试网^*b,flk cj

通过对这些测试结果的分析,可以看出相对于原来的for语句foreach具有
]#Rs(c7~)|0更好的执行效率,foreach的平均花费时间只有for30%。通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach.在测试同时
%^9]1Fv:f&^7L.a0我们附加的发现,用for写入数据时间大约是读取数据时间的10倍左右.:P
5d2b"w xT eT1J0

?zy f^(E)d0

TAG: 执行效率 Testing

 

评分:0

我来说两句

日历

« 2024-04-23  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 76835
  • 日志数: 93
  • 建立时间: 2007-03-22
  • 更新时间: 2007-12-31

RSS订阅

Open Toolbar