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/