测试LINQ查询中的ToList()方法性能

1.测试使用ToList():

private static void TestToListPerformance()
        {
            Stopwatch sw = new Stopwatch();
            List<int> arrList = new List<int>();

            for (var i = 0; i < 20000000; i++)
            {
                arrList.Add(i);

            }

            sw.Start();
            var query = arrList.Where(p => p > 10).ToList();
            sw.Stop();
            Console.WriteLine("使用ToList()方法构造数据:消耗{0}毫秒", sw.ElapsedMilliseconds);
            sw.Restart();
            foreach (var v in query)
            {
                
            }
            sw.Stop();
            Console.WriteLine("使用ToList()方法查询:消耗{0}毫秒", sw.ElapsedMilliseconds);
            Console.WriteLine();

        }

2.测试不使用ToList()方法:

        private static void TestNoToList()
        {
            Stopwatch sw = new Stopwatch();
            List<int> arrList2 = new List<int>();

            for (var i = 0; i < 20000000; i++)
            {
                arrList2.Add(i);
            }

            sw.Start();
            var query = arrList2.Where(x=>x>10);
            sw.Stop();
            Console.WriteLine("不使用ToList()方法构造数据:消耗{0}毫秒", sw.ElapsedMilliseconds);
            sw.Restart();
            foreach (var v in query)
            {
                
            }
            sw.Stop();
            Console.WriteLine("不使用ToList()方法查询:消耗{0}毫秒", sw.ElapsedMilliseconds);
            Console.WriteLine();
        }

 

测试截图:

可以看到,使用ToList()方法时,当执行到ToList()方法是,先将查询的结果放入List中,存储在内存中,这种情况适用于将结果存储为集合,但是非常不适合查询大量的数据,查询大量的数据放入内存中,非常影响性能,大量的事件花费在把数据存入List中。

不使用ToList()方法,既是LINQ强大的延迟查询功能,在foreach语句,需要使用查询结果时,才会开始查询数据,这就是为什么消耗0毫秒的原因。

很明显,当查询大量数据时,使用ToList()会极大的损耗性能,而LINQ的延迟查询就会很快。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值