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/

最新文章

  1. 耗电—Android
  2. Windows phone应用开发[21]-图片性能优化
  3. HDU5008 Boring String Problem(后缀数组 + 二分 + 线段树)
  4. ppDelegate的相关介绍
  5. 打开office2010里面的access,总是提示要配置Office single image
  6. 【转载】CMake 简介和 CMake 模板
  7. MFC的GUI窗口使用Console输出函数printf
  8. Weblogic的Admin server进程将CPU消耗尽问题解决
  9. MSSQL奇技淫巧
  10. 使用dom4j解析XML例子
  11. Codeforces Round #367 (Div. 2)D. Vasiliy's Multiset (字典树)
  12. Android studio导入工程很卡及下载网络jar很慢问题总结
  13. 深度学习之卷积神经网络(CNN)
  14. DAY30、网络编程
  15. Docker 搭建私有仓库
  16. 《HTTP 权威指南》笔记:第十四章 安全 HTTP
  17. 那些IT行业的经典定律
  18. Vue之双向绑定原理动手记
  19. oracle 11g RAC 在Windows 7下安装
  20. hadoop学习---运行第一个hadoop实例

热门文章

  1. Java、Scala类型检查和类型转换
  2. 5.Vue.js-模板语法
  3. ActiveMQ(三)——理解和掌握JMS(1)
  4. jupyter的使用技巧
  5. ANTLR 环境准备
  6. Go语言核心36讲(Go语言实战与应用二十五)--学习笔记
  7. testng 执行多个suite
  8. 从离线分析建模到稳健风控升级,为什么说顶象Dinsight实时风控引擎是对的选择?
  9. bjdctf_2020_babystack2
  10. 自动化测试环境搭建之Python3.6+selenium44+firefox