桑心啊,List<T>.FindAll()的效率竟然比for循环还差。
2012-04-24 12:54
369 查看
自从认识了FindAll(),一般List中查找符合条件的数据项我都用List<T>.Find()或List<T>.FindAll().
代码简洁,自己看了赏心悦目,况且是微软内部的方法,效率应该不会差。
然而,今天心血来潮,写代码测试了一下,确发现FindAll()比For循环效率差了好多,集合比较小的时候这差异就更明显了。
测试代码:
List长度为100时的测试结果,即上面的代码:
哎,集合小的时候差距最为明显,想不到差了五六十倍。
看来以后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()还是少用为好。
相关文章推荐
- List<T> 高级进阶 实现查询功能FindAll()
- [C#/ASP.NET]List<>中Sort()、Find()、FindAll()、Exist()的使用方法
- List<T>的Sort,Find,Exists等的使用(摘抄)
- List<T> 排序(Sort)查找(Find)功能的多种实现
- C#中For循环和List.Find效率的比较
- [测试]Gridview绑定SqlDataReader+IList<T>和SqlDataAdapter+DataSet的效率
- Dictionary<K,V> 与 List<T> 集合的区别及效率
- 【转】List<T>的Sort,Find,Exists等的使用
- [C#/ASP.NET]List<>中Sort()、Find()、FindAll()、Exist()的使用方法
- C# List<T>中Find的用法
- List<T>.Find()方法的运用
- List<>中Find的用法
- Resources.FindObjectsOfTypeAll<T>()的坑(Ghost prefab)
- Dictionary<T1,T2>和List<T>哪个效率更好
- List<T>线性查找和二分查找BinarySearch效率分析
- [C#/ASP.NET]List<>中Sort()、Find()、FindAll()、Exist()的使用方法
- List<T>的Sort,Find,Exists等的使用
- Java中<list,set,map>的遍历与增强for循环
- c#List<T>四种查询方式的效率对比
- List<T>泛型 之 FindIndex