您的位置:首页 > 其它

桑心啊,List<T>.FindAll()的效率竟然比for循环还差。

2012-04-24 12:54 369 查看
自从认识了FindAll(),一般List中查找符合条件的数据项我都用List<T>.Find()或List<T>.FindAll().

代码简洁,自己看了赏心悦目,况且是微软内部的方法,效率应该不会差。

然而,今天心血来潮,写代码测试了一下,确发现FindAll()比For循环效率差了好多,集合比较小的时候这差异就更明显了。

测试代码:

Stopwatch watch = new Stopwatch();
Random rand = new Random();
List<int> list = new List<int>();
//构造一个LIST
for (int i = 0; i < 100; i++)
{
list.Add(rand.Next(10));
}
//用FindAll
watch.Start();
List<int> resultFindAll = list.FindAll(delegate(int i) { return i == 5; });
watch.Stop();
Console.WriteLine("FindAll:" + watch.Elapsed.Ticks);
Console.WriteLine("resultFindAll:" + resultFindAll.Count);
//用For循环
List<int> resultFor = new List<int>();
watch.Reset();
watch.Start();
for (int i = 0; i < list.Count; i++)
{
if (list[i] == 5)
{
resultFor.Add(list[i]);
}
}
watch.Stop();
Console.WriteLine("For:"+watch.Elapsed.Ticks);
Console.WriteLine("resultFor:" + resultFor.Count);


  List长度为100时的测试结果,即上面的代码:



哎,集合小的时候差距最为明显,想不到差了五六十倍。

看来以后List<T>.FindAll()还是少用为好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: