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更加耗時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM