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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?