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标准操作符最强总结
147 0
|
开发框架 自然语言处理 .NET
Linq To Object——三种委托
Linq To Object——三种委托
133 0
|
SQL 存储 .NET
一起谈.NET技术,使用LINQ Expression构建Query Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
998 0
|
SQL 存储 .NET
使用LINQ Expression构建Que“.NET研究”ry Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
1009 0
|
.NET C# 开发框架
|
.NET
Linq to Object实现分页获取数据
最后调用的CSharp代码可以是: int totalcount = dboperator.Customers.Count(); //总记录数 int pagesize = 100;//每页显示数 ...
755 0
|
SQL .NET
LINQ&EF任我行(二)--LinQ to Object (转)
(原创:灰灰虫的家http://hi.baidu.com/grayworm)LinQ to Objects是LinQ家庭的核心,其它的LinQ也使用了与LinQ to Objects相同的查询句法。最终编译器都是把LinQ句法翻译成扩展方法的链式表达式,同时把扩展方法中的lambda表达式转换成匿名类中的匿名方法,然后再把查询表达式编译成MSIL。
1134 0
|
4天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
135 4
|
2月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
114 20