2009-10-30 20 views
0

編輯2:
在終於可以將兩者相互配置後,似乎在我的情況下.AsQueryable()比Expression.Compile()稍快。AsQueriable()或表達式<T> .Compile()?

原題:
我已經實現了一些數據庫表的高速緩存(如List<T>),我需要用相同的Expression<Func<T, bool>>查詢作爲對Table<T>本身查詢時我會用。

什麼是這些最快/最好的方法:

List<T>.AsQueryable().FirstOrDefault(Expression<Func<T, bool>>) 

List<T>.FirstOrDefault(Expression<Func<T, bool>>.Compile()) 

編輯: 更改從哪裏來FirstOrDefault,因爲這是我使用的方法。當我寫這個問題時,我想我有點累了。 FirstOrDefault會檢查每個項目,比如Where,還是實際停止在第一次擊中(如果有的話)?

回答

1

一如既往,以確定什麼是更快的最好辦法是嘗試一下,但是:

過濾一個列表<>使用簡單哪裏總是會導致被檢查一次,每個項目。如果沒有進一步的假設,例如按特定順序對列表進行排序,則實際上沒有其他方法,這意味着您給出的兩個版本將導致對您的表達進行完全相同的評估。

如果您要多次使用相同的表達式,您可能會從編譯它並緩存委託中受益,但數據必須很小並且表達式複雜才能使它有所作爲。

編輯:通過可查詢去可能可能是實際上不依賴於任何輸入在所有表現形式,例如()更快=>假。

+0

從哪裏切換FirstOrDefault是否改變任何東西? My List <>僅僅是一個Table <>。ToList(),所以它們只是SQL中表的副本。查詢非常簡單,只需將輸入參數與列值字符串比較結合起來即可。 – 2009-11-02 09:26:19

1

取決於要執行多少操作以及表達式執行的處理器強度。

您可以使用秒錶或其他診斷組件輕鬆測試此功能。

1

爲什麼第二次猜測呢?用您的數據對其進行分析,看看最適合您的數據。

相關問題