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/

文章来源:https://www.cnblogs.com/jchhh912/p/15747572.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 自定义开发)
下一篇:WPF开发随笔收录-带递增递减按钮TextBox
评论列表

发表评论

评论内容
昵称:
关联文章

LinqLambda 性能对比
DBHelper SqlSugar EntityFramework 增删改查 性能对比测试
sqlsugar freesql hisql 三个ORM框架性能测试对比
Linq to SQL语句基础讲解
iNeuOS工业互联网操作系统,发布3.6.4版本:云端安全控制实时日志功能,附Chrome、FirefoxEdge浏览器测试性能对比
了解LINQ
也谈string.JoinStringBuilder的性能比较
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
C#性能优化总结
显卡测试:测试GPU渲染性能 网站地址
.net中使用Linq 判断两个集合是否有交集的集合类
EntityFramework Linq 查询数据获得树形结构
EF Linq查找所有子节点或者所有父节点
EntityFramework Linq 获得所有数据,包括子节点
对象Datatable互转
微软的SerializeNewtonsoft的SerializeObject比较
C# LINQ中SUM,MAX,MIN时如果数据为空,报错NULL
yesweb-libs安装简介
使用Hot Chocolate.NET 6构建GraphQL应用(1)——GraphQL及示例项目介绍
在Winform项目Web API的.NetCore项目中使用Serilog 来记录日志信息

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码