LinkQ性能测试

本文通过实验对比了Linq和DataView在一万条记录查找速度上的性能表现,结果显示DataView的速度远超Linq,尤其是在大量数据查询时。文章详细介绍了两种方法的具体实现过程,并分析了DataView速度快的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习Linq,我之前一直习惯使用DataTable和DataView的,尤其是一万条以上的记录,都要转成DataView,这样查找速度快。

至于Linq,我知道它肯定比DataView要慢的,但慢到什么程度,还没有测试过,现在就来一发:

1.测试条件

共生成10000条记录(姓名,成绩),其中成绩用(0-100)的随机整数模拟,再随机创建5000个随机整数,在之前的集合中查找,模拟实际的查询操作

DataView:

private void TestSpeed_Table()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("userName", typeof(string));
            dt.Columns.Add("score", typeof(int));
            for(int i=0;i< testCount;i++)
            {
                dt.Rows.Add(new object[] { "name"+i, GenScore() });
            }

            DataView dv = new DataView(dt);
            dv.Sort = "score";
            int findCount = 0;
            Stopwatch st = new Stopwatch();
            st.Start();
            for (int i=0;i<5000;i++)
            {
                int score = GenScore();
                int pos = dv.Find(score);
                if (pos >= 0)
                    findCount++;
            }
            st.Stop();
            Console.WriteLine(st.ElapsedMilliseconds+":find count:"+findCount);
            Console.ReadLine();//1毫秒
        }



Linq

private void TestSpeed_Linq()
        {
            List<User> lst = new List<User>();
            for(int i=0;i<testCount;i++)
            {
                lst.Add(new User
                {
                    UserName = "name" + i,
                    Score = GenScore()
                });
            }

            Stopwatch st = new Stopwatch();
            st.Start();
            int findCount = 0;
            for (int i = 0; i < 5000; i++)
            {
                int score = GenScore();
                var q=lst.First<User>(a =>a.Score==score);
                if (q != null)
                    findCount++;

            }
            st.Stop();
            Console.WriteLine(st.ElapsedMilliseconds + ":find count:" + findCount);
            Console.ReadLine();//40毫秒

        }
        
结果分别为1毫秒和40毫秒,相差40倍。查5000次是DataView的最小次数,小于这个次数所用时间都是0。

将查询降到1000次,Linq用的时间大概是3、4秒,这个数量级看来Linq还凑和。


DataView为什么快?因为它在配置了Sort后,相当于在内存表里建了索引,所以速度是相当的快。虽然是一个很老的技术,但仍然是我最爱用的。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值