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!

 



本文转自王磊的博客博客园博客,原文链接:http://www.cnblogs.com/vipstone/archive/2012/05/08/2490440.html,如需转载请自行联系原作者


目录
相关文章
|
存储 SQL 开发框架
Linq To Object标准操作符最强总结
Linq To Object标准操作符最强总结
135 0
|
开发框架 自然语言处理 .NET
Linq To Object——三种委托
Linq To Object——三种委托
123 0
|
SQL 存储 .NET
一起谈.NET技术,使用LINQ Expression构建Query Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
975 0
|
SQL 存储 .NET
使用LINQ Expression构建Que“.NET研究”ry Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
997 0
|
.NET C# 开发框架
|
.NET
Linq to Object实现分页获取数据
最后调用的CSharp代码可以是: int totalcount = dboperator.Customers.Count(); //总记录数 int pagesize = 100;//每页显示数 ...
747 0
|
SQL .NET
LINQ&EF任我行(二)--LinQ to Object (转)
(原创:灰灰虫的家http://hi.baidu.com/grayworm)LinQ to Objects是LinQ家庭的核心,其它的LinQ也使用了与LinQ to Objects相同的查询句法。最终编译器都是把LinQ句法翻译成扩展方法的链式表达式,同时把扩展方法中的lambda表达式转换成匿名类中的匿名方法,然后再把查询表达式编译成MSIL。
1128 0
|
2月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
6天前
|
Python
类与面向对象编程(Object-Oriented Programming, OOP)
类与面向对象编程(Object-Oriented Programming, OOP)
13 0
|
2月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
33 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
下一篇
无影云桌面