[英]Are there any performance difference between these 2 linq queries, are they identical or essentially different?
另外,where子句的順序重要嗎?
from x in A.where(x=>CriteriaA(x))
from y in B where(y=>CriteriaB(y))
where CriteriaC(x,y)
from x in A
from y in B
where(x=>CriteriaA(x))
where(y=>CriteriaB(y))
where CriteriaC(x,y)
from x in A
from y in B
where(y=>CriteriaB(y))
where(x=>CriteriaA(x))
where CriteriaC(x,y)
更新 :都是IEnumerable <>和Linq對象
使用Jon Skeet的場景:A有100個條目,其中25個與CriteriaA相匹配B有100個條目,其中50個與CriteriaB相匹配
第一第一方法中,將有100個電話到CriteriaA
,2500調用CriteriaB
,和1250調用CriteriaC
。
第二種方法,將有10000次CriteriaA
調用,2500次CriteriaB
調用和1250次CriteriaC
調用。
第三種方法,將有10000次CriteriaB
調用,5000次CriteriaA
調用和1250次CriteriaC
調用。
那是對的嗎?
這將部分取決於這是LINQ to Object,還是LINQ to SQL等。讓我們假設LINQ to Object。
想象一下這種情況:
A
有100個條目,其中25個與CriteriaA相匹配 B
有100個條目,其中50個匹配CriteriaB 然后,在第一種情況下,將有100個對CriteriaA的調用,2500個對CriteriaB的調用和1250個對CriteriaC的調用。
在第二種情況下,將有10,000個對CriteriaA的調用,2500個對CriteriaB的調用和1250個對CriteriaC的調用。
如果您“實現”一個Where
調用的結果,如下所示:
var resultsB = B.Where(y => CriteriaB(y)).ToList();
from x in A.Where(x => CriteriaA(x)).ToList()
from y in resultsB
where CriteriaC(x,y)
然后,將有100個對CriteriaA的調用,100個對CriteriaB的調用和相同的1250對CriteriaC的調用。 顯然,這將占用更多內存,因為它必須緩存結果
我希望第一個更快,因為獲取的數據更少。
但這可能取決於數據集,這當然與IEnumerable<>
或IQueryable<>
。
如果您真的想知道:測量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.