zoukankan      html  css  js  c++  java
  • Datatable筛选中Foreach、Linq、Select几种方法效率比较

    假设要在Datatable中选出符合要求的一串数据,可以有Foreach循环、Linq语句和Select语句几种方法,构造一个简单数据后做了下效率对比,发现Linq最慢,其次Foreach,最快是Select。

    代码如下:

            static void Main(string[] args)
            {
                int dataCount = 100000;
                DataTable dt = new DataTable();
                dt.Columns.Add("MacID", typeof(int));
                dt.Columns.Add("DevID");
    
                DataColumn[] keys = new DataColumn[1];
                keys[0] = dt.Columns[0];
                dt.PrimaryKey = keys;
    
                for (int i = 0; i < dataCount; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr["MacID"] = i;
                    dr["DevID"] = dataCount - i;
                    dt.Rows.Add(dr);
                }
    
                long startTick;
                long stopTick;
    
                // Foreach 
                int filterCount = 0;
                startTick = DateTime.Now.Ticks;
                foreach (DataRow item in dt.Rows)
                {
                    if ((int)item[0] > 200)
                    {
                        filterCount++;
                    }
                }
                Console.WriteLine("ID > 200: " + filterCount);
                stopTick = DateTime.Now.Ticks;
                Console.WriteLine("Foreach " + (stopTick - startTick));
    
                // Linq
                startTick = DateTime.Now.Ticks;
                var newList = (from item in dt.AsEnumerable()
                               where item.Field<int>(0) > 200
                               select item).ToList();
                Console.WriteLine("ID > 200: " + newList.Count);
                stopTick = DateTime.Now.Ticks;
                Console.WriteLine("LINQ " + (stopTick - startTick));
    
                // SELECT
                startTick = DateTime.Now.Ticks;
                var filterResult = dt.Select("MacID > 200");
                Console.WriteLine("ID > 200: " + filterResult.Count());
                stopTick = DateTime.Now.Ticks;
                Console.WriteLine("SELECT " + (stopTick - startTick));
                
                Console.ReadLine();
            }

    运行后得到如下结果:

    Foreach 120014

    LINQ 340026

    SELECT 79994

    SELECT效率最高,但具体也得看数据表是如何建立索引的,不同的索引对搜索结果有较大影响,LINQ效率居然低于Foreach,这是挺意外的,目前并不清除为什么会比Foreach更加耗时。

  • 相关阅读:
    人机界面设计
    可用性
    * 产品设计
    界面设计
    原型设计工具——Axure
    原型系统
    交互设计
    原型设计
    Microsoft-PetSop4.0(宠物商店)-数据库设计-Sql
    第1章 游戏之乐——NIM(2)“拈”游戏分析
  • 原文地址:https://www.cnblogs.com/wantoo/p/4047650.html
Copyright © 2011-2022 走看看