.where(provider).FirstOrDefault()和.FirstOrDefault(provider)的性能比較


最近遇到一個關於Linq的問題,
.where(provider).FirstOrDefault();和.FirstOrDefault(provider);的性能比較

關於這個主要有以下三種說法,但這方面的資料比較少,我找到的就下面着幾個地方。

第一種說法:.where(provider).FirstOrDefault()比較快,
支持這個觀點的資料:http://stackoverflow.com/questions/8663897/why-is-linq-wherepredicate-first-faster-than-firstpredicate

第二種說法:.FirstOrDefault(provider)比較快
感覺FirstOrDefault更加直接有效。

第三種說法:差不多一樣快,這種說法也比較多,因為從linq的lazy來說及兩種方法核心都是用List.GetEnumerator的來說應該是一樣的
支持這個觀點的資料:http://prashantvc.wordpress.com/2013/03/07/where-firstordefault-vs-firstordefault/

別人說的做為參考,還是自己測試一下


但通過測試的結果貌似是驗證第一種說法。

最后在msdn上找到了我認為的答案
http://msdn.microsoft.com/en-us/library/bb882641.aspx

結果是,這兩種性能完全看data的provider
有的情況直接(Immediate)執行快,有的情況延時的(Deferred) 快
比如說data是連接數據庫,或者『wellcoded』的遠端數據源,Deferred  streaming肯定更快
但是如果是完全備置的數據而且索引良好訪問順暢,那直接(Immediate)執行會快點(主要是少了一層yeild)。

這個具體可以通過上面的msdn網站查找其類型。

ps:這個地方的應用不局限於這兩種方法,Linq的其它方法也都有着區別,在應用的時候查看一下該方法的類型應該是有幫助的。


免責聲明!

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



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