• LINQ能不能用系列(一)LINQ to Object 效率比对


    前言

    简介:LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。

    分类:LINQ to Object, LINQ to XML, LINQ to SQL, LINQ to DataSet,LINQ to ADO.NET。

    相关:相信linq大家已经很熟悉了,如果有不太熟的,可以参考MSDN 地址:http://msdn.microsoft.com/zh-cn/library/bb397933.aspx
    缘由:Linq 到底能不能用?究竟好不好用,很多时候大家还是众说纷纭,有人迷茫,有人观望,有人觉得无所谓,或者还有人说只是语法糖,中看不中用,哪我们这个系列就为大家揭开谜团。首先来看LINQ to Object在数组筛选方面的效率测试吧。

    实例分析

    测试环境:visual studio 2011 Beta(netframework 4.0+)C# 控制台程序

    测试需求:从10000000条数据中查询大于100的数据。

    核心代码(LINQ):

    var linqList = from num in list1
                    where num > 100
                    select num;

    完整代码:

    /// <summary>
    /// 效率测试
    /// </summary>
    /// <param name="testCount">第几次测试</param>
    private static void timeTest(int testCount)
    {
        const int listCount = 10000000;         // 数组长度
        Random random = new Random();           // 数据随机构建值
    
        // 数组构建 
        List<int> listData = new List<int>();
        for (int i = 0; i < listCount; i++)
        {
            listData.Add(random.Next(10000));
        }
    
        // LINQ 测试
        Stopwatch linq_Stopwatch = new Stopwatch();
        linq_Stopwatch.Start();
        var linqList = from num in listData
                        where num > 100
                        select num;
        var linqCount = linqList.Count();   
        linq_Stopwatch.Stop();
    
        // 普通方式 测试
        Stopwatch before_Stopwatch = new Stopwatch();
        before_Stopwatch.Start();
        List<int> beforeList = new List<int>(listCount);
        for (int i = 0; i < listData.Count(); i++)
        {
            if (listData[i] > 100)
                beforeList.Add(listData[i]);
        }
        var beforeCount = beforeList.Count;
        before_Stopwatch.Stop();
    
        // 打印结果
        Console.WriteLine(String.Format("第{0}次测试,测试:{5}条数据。\n\r \t LINQ用时:{1}毫秒,筛选了{2}条数据。\n\r\t 普通用时:{3}毫秒,筛选了{4}条数据。\r\n",
            testCount, linq_Stopwatch.ElapsedMilliseconds, linqCount, before_Stopwatch.ElapsedMilliseconds, beforeCount, listCount));
    }

    结果

    结论:此可知LINQ to Object在做数据处理,效率要好于手动判断,当然LINQ伟大应该是她的语法简洁与优雅。在做数据处理时个人推荐使用LINQ to Object!

     

     

  • 相关阅读:
    Ubuntu 系统中设置环境变量 PATH 的方法
    JSP页面EL表达式无效的问题
    用超链接提交表单并传递一个参数
    sql触发器应用SQL中DateTime转换成Varchar样式
    算法导论第二章 习题作业记录
    【欧拉题四】三位数乘积所得的最大回文数
    Linux64下mysql安装和开发
    算法导论第三章 学习笔记
    【欧拉3】最大质因数
    常用linux命令/工具
  • 原文地址:https://www.cnblogs.com/vipstone/p/2490440.html
Copyright © 2020-2023  润新知