• Linq和Lambda 性能对比


    Linq和Lambda 性能对比


    1.Where()

    • 使用LINQ创建一个简单的where查询

    var query = from person in PersonCollection where person.Age.TotalDays > 1000 select person; var result = query.ToList() // This runs the query

    • 使用LAMBDA创建一个相同的查询

    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).ToList();

    查看性能对比

    可以看到两者的性能差距并不是很大

    2.Any() 如果集合中只要有一项符合条件,将返回一个bool值

    同样使用上面的LINQ,但这次测试Any()方法,并使用三种不同的Any用法来测试

    // Api
    var query = from person in PersonCollection where person.Age.TotalDays > 1000 select person;
    var result = query.Any(); // Any()

    // LAMBDA'S
    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).Any(); //Where().Any()

    var result = PersonCollection.Any(p => p.Age.TotalDays > 1000);//Any()

    查看性能对比

    可以看到LAMBDA直接调用Any()方法最快

    3.First() & FirstOrDefault()

    First()方法是返回集合中符合条件的第一个元素,当没有元素满足条件时,会抛出异常
    FirstOrDefault()方法也是返回集合中符合条件的第一个元素,但当没有元素满足条件时候将返回默认值,使用时需注意是否为null

    //Api
    var query = from person in PersonCollection where person.Age.TotalDays > 1000 select person;
    var result = query.First();//First()
    var result = query.FirstOrDefault();//FirstOrDefault()

    // LAMBDA'S
    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).First(); //Where().First()
    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).FirstOrDefault(); //Where().FirstOrDefault()
    var result = PersonCollection.First(p => p.Age.TotalDays > 1000); //First()
    var result = PersonCollection.FirstOrDefault(p => p.Age.TotalDays > 1000);//FirstOrDefault()

    查看性能对比

    可以看到LAMBDA直接调用First()或FirstOrDefault()最快

    4.Last() & LastOrDefault()

    Last()方法返回集合中符合条件的最后一项元素,当没有元素满足条件时,会抛出异常
    LastOrDefault()方法也是返回集合中符合条件的最后一项元素,但当没有元素满足条件的时候将返回默认值,使用时需注意是否为null
    // API
    var query = from person in PersonCollection where person.Age.TotalDays > 1000 select person;

    var result = query.Last();//Last()
    var result = query.LastOrDefault();//LastOrDefault()

    // LAMBDA'S
    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).Last();//Where().Last()
    var result = PersonCollection.Where(p => p.Age.TotalDays > 1000).LastOrDefault();//Where().LastOrDefault()
    var result = PersonCollection.Last(p => p.Age.TotalDays > 1000);// Last()
    var result = PersonCollection.LastOrDefault(p => p.Age.TotalDays > 1000);//LastOrDefault()

    查看性能对比

    可以看到LAMBDA直接调用Last()或LastOrDefault()最快

    5.概况

    经过几个测试下来,发现在LAMBDA语句开头使用Any(),First(),FirstOrDefault(),Last(),LastOrDefault或Where()可以提高程序的性能。原因下次有时间再写了

    ref:https://www.c-sharpcorner.com/article/collection-performance-how-do-you-linq/

  • 相关阅读:
    Shell脚本:使用rsync备份文件/目录
    如何在 CentOS 中设置 NTP 服务器
    NGINX引入线程池 性能提升9倍
    如何在Quagga BGP路由器中设置IPv6的BGP对等体和过滤
    如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
    在 Ubuntu 上配置高性能的 HHVM 环境
    在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
    如何删除 Ubuntu 上不再使用的旧内核
    如何在 Arch Linux 中安装 DNSCrypt 和 Unbound
    在 CentOS 7 中安装并使用自动化工具 Ansible
  • 原文地址:https://www.cnblogs.com/jchhh912/p/15747572.html
Copyright © 2020-2023  润新知