public static void Main(string[] args)
{
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
int length = 16777216;
for (int i = 0; i < length; ++i)
{
arrayList.Add(i);
} System.Console.WriteLine("Thie size of arrayList is: {0}", arrayList.Capacity);
DateTime start = new DateTime(); start = DateTime.Now;
foreach (int i in arrayList)
{}
DateTime end = DateTime.Now;
TimeSpan ts = end - start;
System.Console.WriteLine("foreach method used [{0}] ms to traversal the arrayList!", ts.TotalMilliseconds); start = DateTime.Now;
for (int i = 0; i < arrayList.Capacity; ++i)
{}
end = DateTime.Now;
ts = end - start;
System.Console.WriteLine("for method used [{0}] ms to traversal the arrayList!", ts.TotalMilliseconds);
System.Console.Read(); /*运行结果如下:
* Thie size of arrayList is: 16777216
* foreach method used [343.75] ms to traversal the arrayList!
* for method used [109.375] ms to traversal the arrayList!
*/
}
{
arrayList.Add(new object());
}
另外你的for并没有实际赋予对象,相当于for(int i=0;i<j;i++),而foreach则是已经赋予对象了的,
是有差别的
List<int> list = new List<int>();
//list 赋值
foreach (int i in list )
{}
for (int i = 0; i < arrayList.Capacity; ++i)
{
int v = arrayList[i];
}
你试试,应该差距不大
for (int i = 0; i < arrayList.Count; ++i)
{
int v = (int)arrayList[i];
} 莫非是因为Foreach采用的是ienumerator接口,多了函数的调用?所以慢了?关注
foreach用的ienumerator慢点。
我测试的时候就是foreach快点了。
foreach (int i in arrayList)
{
}for (int i = 0; i < arrayList.Capacity; ++i)
{
int val = arrayList[i];
}上面两个操作基本上完全等价的,执行完成的时间基本上差不多,在200ms左右。事实上foreach并没有改变多少效率问题,当然应当会慢一点,因为遍历的访问的方式,但不至于离谱到1/3于for。
for(int i=0;i<16777216;i++);
而foreach却访问了arrayList 至少取得了他每一个变量 如果在循环里写上代码 两者就相差无几了
foreach (int i in arrayList)
{
j = i;
}
for (int i = 0; i < arrayList.Count; ++i)
{
j = arrayList[i];
}2 而且使用用for的话使用要索引器访问迭代变量 效率损失很大
比如使用datatable的话在for中得用Dt.Rows[i]来引用 这样的效率损失是非常大的 我试了用datatable的话for比foreach要多用掉很多很多时间
所以在不修改迭代变量的情况下还是用foreach效率好些
我试了一个,看不出来,受页面加载时间的影响。
int count=0;
string name="";
foreach (DataRow dr in dt.Rows)
{
if(name==dr["Name"].ToString())
{
count++;
}
else
{
count=1;
}
}
foreach 在迭代取值比for快,在100W条数据foeach为1.34375s,for为2.23544s