簡體   English   中英

這兩個linq查詢之間是否存在性能差異?它們是相同還是本質上不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM