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 性能对比的更多相关文章

  1. java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比

    java8 for ,forEach ,Iterator,lambda forEach ,lambda  strean forEach , lambda parller stream forEach性 ...

  2. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  3. 不同Framework下StringBuilder和String的性能对比,及不同Framework性能比(附Demo)

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 环境搭建 测试用例 MSDN说明 ...

  4. Net Core下多种ORM框架特性及性能对比

    在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...

  5. 再看ExpressionTree,Emit,反射创建对象性能对比

    [前言] 前几日心血来潮想研究着做一个Spring框架,自然地就涉及到了Ioc容器对象创建的问题,研究怎么高性能地创建一个对象.第一联想到了Emit,兴致冲冲写了个Emit创建对象的工厂.在做性能测试 ...

  6. 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象

    本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...

  7. C++:几种callable实现方式的性能对比

    C++中几种callable实现方式的性能对比 前言 C++中想实现一个callable的对象,通常有四种方式: std::function:最common的方式,一般会配合std::bind使用. ...

  8. SQL、Linq和Lambda表达式 的关系

    首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...

  9. 求斐波那契数列第n位的几种实现方式及性能对比(c#语言)

    在每一种编程语言里,斐波那契数列的计算方式都是一个经典的话题.它可能有很多种计算方式,例如:递归.迭代.数学公式.哪种算法最容易理解,哪种算法是性能最好的呢? 这里给大家分享一下我对它的研究和总结:下 ...

随机推荐

  1. 日常Java 2021/10/30

    Java泛型 Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型.泛型的本质是参数化类型,也就是说所操作的数据类型 ...

  2. 学会这几步,简单集成视频编辑原子能力SDK

    华为视频编辑服务6.2.0版本上线后,我们为大家带来了两大变化:分别是丰富多样的AI能力和灵活选择的集成方式.为让开发者更快上手使用,今天小编带来了视频编辑原子能力SDK的具体集成方法.快来试试吧! ...

  3. addict, address, adequate.四级

    addict addiction – a biopsychosocial [生物社会心理学的 bio-psycho-social] disorder characterized by persiste ...

  4. 图形学3D渲染管线学习

    图形学3D渲染管线 DX和OpenGL左右手坐标系不同,会有一些差距,得出的矩阵会不一样; OpenGL的投影平面不是视景体的近截面: 顶点(vertexs) 顶点坐标,颜色,法线,纹理坐标(UV), ...

  5. k8s配置中心-configmap,Secret密码

    目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...

  6. When should we write our own assignment operator in C++?

    The answer is same as Copy Constructor. If a class doesn't contain pointers, then there is no need t ...

  7. Linux:变量$#,$@,$0,$1,$2,$*,$$,$?

    写一个简单的脚本 vim var 脚本内容如下: #!/bin/sh echo "the number of parameters passed to the script: $#" ...

  8. linux环境下安装jdk,tomcat

    一.安装tomcat 1.使用docker安装(你得linux服务器上已经安装了docker) 1)执行命令: docker search tomcat; 2)选择第一个镜像进行下载,执行命令:doc ...

  9. Spring Batch(0)——控制Step执行流程

    Conditional Flow in Spring Batch I just announced the new Learn Spring course, focused on the fundam ...

  10. 设计模式学习笔记之看懂UML类图

    什么是UML: UML(统一建模语言)是当今软件设计的标准图标式语言.对于一个软件系统而言,UML语言具有以下的功能:可视化功能.说明功能.建造功能和建文档功能. UML都包括什么类型的图: 使用案例 ...