2009-07-20 44 views
1

簡短問題:有沒有人有關於Linq的大容量數據的內存性能的任何信息?特別Linq到數據集或Linq到對象。Linq到大數據集的數據集/對象的內存性能

它可以處理的最大數量的記錄/對象是什麼?什麼是內存開銷?任何人都可以發佈一些棒球內存使用數據?

背景

我公司與外部數據庫的性能非常差(須因過度crapness仍然未命名)進行交互。它有一個適用於基本SELECTS的ODBC接口,但是有一些JOIN的性能會下降(對於任何試圖使用OUTER JOINS的人來說都是有害的)!

此前我們已經通過將SELECT * FROM Table語句複製到SQL數據庫並運行SQL查詢來解決此問題。但是,我們想從等式中刪除SQL服務器(刪除外部依賴關係)。

我想到的解決方案是將SELECT * FROM Table放入一些DataSets(或可能是自定義對象)中,並使用Linq在內存中執行所有查詢。

我們與之交互的數據大小限制爲2GB(並且我們不需要一次加載它,可能最多隻有幾百MB)。但是,我擔心看到大量數據的可怕OutOfMemoryException。因此我的問題。

ODBC驅動程序是32位的,所以我不能使用64位進程(不是沒有兩個進程之間的管道數據,我寧願保持複雜性至少)。 ODBC驅動程序是隻讀的。

有關這方面的其他意見或建議也很受歡迎(除了使用像SQL Compact這樣的嵌入式數據庫,如果在內存查詢中不可行,那是我們的計劃B)。 PS:我在接下來幾天做了一些概念驗證的基準測試(我知道我的情況只會在這些基準測試中有詳細說明),但我想看到有人已經有了這方面的經驗。

編輯:這將使用ClickOnce作爲Windows窗體應用程序進行部署。

回答

0

不知道你的應用程序,只能給一般性評論。

  1. 如果這是一個Web應用程序,除非你要創建一個可以跨請求,等來共享一個內存數據庫解決方案(SQL Server和其他人已經這樣做了你),我'強烈建議不要這樣做,因爲它不會太可擴展。

  2. 我仍然建議不要這樣做,因爲我不認爲索引機制是內置到LINQ中的。使用LINQ執行此操作基本上類似於SQL talk中的TABLE SCAN,您可以遍歷整個表以查找正確的數據,而不是使用SQL可爲您提供的更高效的索引。

  3. 是的,當使用SQL Server時,您將確定依賴性和網絡傳輸時間,但我想象給出正確的查詢並返回正確的結果集,SQL仍然會擊敗您正在嘗試執行的操作。

所以,建議...不要重新發明輪子:)其他人已經創建了一個更有效的機制。

如果你仍然想這樣做,我強烈建議你做你自己的真實數據廣泛測試。根據我的經驗,如果您的目標是績效,那麼測試不代表實際數據(大小和內容)的虛擬數據將永遠不夠。

+0

它是WinForms,而不是網頁。這就是爲什麼我們要卸載SQL Server,以儘量減少安裝和維護佔用空間。 – ligos 2009-07-20 04:24:57

+0

我想你已經在問題中得到了你的答案:)。在這種情況下,我的選擇可能會在同一行(Sql CE)。你仍然可以使用LINQ來反對那個組合的內部處理。我不認爲強迫LINQ替換真正的DB是一個不錯的選擇。 – 2009-07-20 04:46:47

+0

我會把它放在船上。我只是試圖將一個查詢接口包裝在一個不好的數據源周圍,線性搜索會比我們所擁有的要好得多! – ligos 2009-07-20 05:14:29

1

請參閱以下StackOverflow後;它包含一些關於如何使用Linq to SQL管理內存的很好的技巧:

如何避免LINQ-to-SQL的內存泄漏?
How do I avoid a memory leak with LINQ-To-SQL?

+0

寫我的問題時沒有看到。有幫助,但不是我想要的。 – ligos 2009-07-20 04:21:45