2010-08-26 30 views
0

我正在嘗試使用LINQ進行某些操作。所以在LINQ中可能會有數百萬條記錄被使用。什麼是LINQ支持的最大對象

那麼在這種情況下值得使用LINQ嗎?什麼是使用LINQ的最大對象限制?

我正在閱讀數據庫記錄並檢查一些條件並將其存儲在List<Result>中。結果是一堂課。然後執行List<Result>中的LINQ查詢(如分組,計數等),因此可能有最小50,000條記錄存在於List<Result>中,因此在此是否更適合LINQ(或)將記錄重新插入到數據庫並執行查詢?

+0

LINQ不一定會將整個數據庫複製到內存中,而且它也不會永久保留內存中的對象。併發內存中對象的最大限制完全取決於您的硬件配置。 – kbrimington 2010-08-26 13:41:21

+0

哪個LINQ? LINQ到對象? SQL?實體? – 2010-08-26 13:43:59

+0

我正在閱讀數據庫中的記錄,並檢查一些條件並將其存儲在列表中。結果是一堂課。 然後在列表中執行LINQ查詢(如分組,計數等),因此可能有最小50,000條記錄在列表中,所以在此處是否更適合LINQ(或)將記錄重新插入到db並執行查詢? – jaks 2010-08-26 17:16:53

回答

1

這取決於你在做什麼。如果你只是用它來構造查詢來處理其他的東西,例如Fluent NHibernate,那麼linq將永遠不會看到這些對象本身,所以不會成爲一個因素。

如果您將linq用於包含數百萬個對象的對象,您可能希望避免將所有對象一次加載到內存中。在這種情況下,您只需要使用lazy linq查詢。喬恩在他的文章的問題Just how lazy are you?

1

LINQ自身工作對的IEnumerable類型的一個很好的概述,所以可以用任何大小集合(甚至無限序列的工作,只要結果是可計算的 - 例如,你可以採取的第一個五年數字來自無限的一系列數字,但沒有找出最大值)。

真正的瓶頸和性能問題將取決於您從哪裏獲取數據。例如,LINQ to SQL將嘗試生成SQL查詢以將大部分工作推送到數據庫,而LINQ to object將需要所有信息在內存中,並且在處理數百萬條記錄時會更慢。

0

如果您的數據庫中有「數百萬條記錄」,那麼您當然不希望將它們都返回給您的LINQ客戶端進行處理。但是,無論您使用的是哪種技術 - Linq,Entity Framework,NHibernate,ADO.Net等,也是如此。

如果您合理地使用LINQ(即FILTER YOUR RESULTS),那麼後備存儲中的行數很大無關。

0

LINQ AFAIK是關於以靈活和簡單的方式查詢對象。

Language Integrated Queries ...它只是在代碼中寫入SQL查詢,這是一種更好的方式,無需學習SQL的所有語言。

只要您的查詢邏輯完好,LINQ只會讓您的生活更輕鬆 - 無論數據大小如何。

如果我錯了,請糾正我!

相關問題