zoukankan      html  css  js  c++  java
  • 桑心啊,List<T>.FindAll()的效率竟然比for循环还差。

    自从认识了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()还是少用为好。

  • 相关阅读:
    Linux -- nginx
    Linux--虚拟环境
    Linux用户权限指令, 定时任务等指令
    Linux的基础命令, django的安装与使用
    .net与Java的WebService互调
    C#中的动态特性
    LINQ之路(3):LINQ扩展
    LINQ之路(2):LINQ to SQL本质
    LINQ之路(1):LINQ基础
    LINQ之路系列文章导读
  • 原文地址:https://www.cnblogs.com/Gyoung/p/2467846.html
Copyright © 2011-2022 走看看