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/
