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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM