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/
Linq和Lambda 性能对比的更多相关文章
- java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比
java8 for ,forEach ,Iterator,lambda forEach ,lambda strean forEach , lambda parller stream forEach性 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 不同Framework下StringBuilder和String的性能对比,及不同Framework性能比(附Demo)
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 环境搭建 测试用例 MSDN说明 ...
- Net Core下多种ORM框架特性及性能对比
在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...
- 再看ExpressionTree,Emit,反射创建对象性能对比
[前言] 前几日心血来潮想研究着做一个Spring框架,自然地就涉及到了Ioc容器对象创建的问题,研究怎么高性能地创建一个对象.第一联想到了Emit,兴致冲冲写了个Emit创建对象的工厂.在做性能测试 ...
- 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象
本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...
- C++:几种callable实现方式的性能对比
C++中几种callable实现方式的性能对比 前言 C++中想实现一个callable的对象,通常有四种方式: std::function:最common的方式,一般会配合std::bind使用. ...
- SQL、Linq和Lambda表达式 的关系
首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...
- 求斐波那契数列第n位的几种实现方式及性能对比(c#语言)
在每一种编程语言里,斐波那契数列的计算方式都是一个经典的话题.它可能有很多种计算方式,例如:递归.迭代.数学公式.哪种算法最容易理解,哪种算法是性能最好的呢? 这里给大家分享一下我对它的研究和总结:下 ...
随机推荐
- 学习java 7.20
学习内容: Stream流 Stream流的生成方式 中间操作方法 终结操作方法 Stream流的收集操作 类加载 类加载器的作用 将.class文件加载到内存中,并为之生成对应的java.lang. ...
- abuse
abuse 近/反义词: ill-treat, maltreat, mistreat, misuse, prostitute, spoil; defame, disparage, malign, re ...
- 17. yum
https://www.linuxidc.com/Linux/2015-04/116331.htm
- vim一键整理代码命令
vim下写代码超实用代码格式整理命令,仅需四步 ①先使用 gg 命令使光标回到第一行 ②shift+v 进入可视模式 ③shift+g 全选 ④按下 = 即可 混乱的代码格式 四步整理以后 工整又 ...
- CentOS 6.4 下 Python 2.6 升级到 2.7
一开始有这个需求,是因为用 YaH3C 替代 iNode 进行校园网认证时,CentOS 6.4下一直编译错误,提示找不到 Python 的某个模块,百度了一下,此模块是在 Python2.7 以上才 ...
- 如何用shell脚本分析网站日志统计PV、404、500等数据
以下shell脚本能统计出网站的总访问量,以及404,500出现的次数.统计出来后,可以结合监控宝来进行记录,进而可以看出网站访问量是否异常,是否存在攻击.还可以根据查看500出现的次数,进而判断网站 ...
- spring Profile 为不同环境提供不同的配置支持
说明 Profile为在不同环境下使用不同的配置提供了支持(开发环境下的配置和生产环境下的配置肯定是不同的, 例如, 数据库的配置) . 在spring开发中用@Profile 注解使用来选择行配置系 ...
- 使用$.ajax方式实现页面异步访问,局部更新的效果
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【MySQL】学生成绩
统计每个人的总成绩排名 select stu.`name`,sum(stu.score) as totalscore from stu GROUP BY `name` order by totalsc ...
- Sql Server 索引笔记
CREATE UNIQUE CLOSTERED INDEX Idx_phone ON teacher (t_phone DESC) WITH FILLFACTOR=30; 如果表中定义了主 ...