問題:我有數百萬行數據庫需要處理。從SqlDataReader返回延期數據
我需要實現一個方法,該方法將返回數據庫行的「流」(?)。 我不想一次將它們全部加載到內存中。
我正在考慮返回一個懶惰的IEnumerable<Record>
並使用yield。 該方法將處理使用SqlDataReader
加載連續記錄。
但是,如果客戶在我的IEnumerable
上撥打.Count()
,會發生什麼?計算所有記錄意味着需要將它們全部取出。
有沒有什麼好的現代方法來返回一個對象流,而不是將它們全部存儲在內存中,只是一個一個的處理?我的方法應該返回一個記錄流。
似乎Reactive Extensions可能會爲我解決問題,但我從未使用它。
任何想法?
謝謝
我可能是錯的,但我已經讀過,它只是在EF 6中,他們最終添加了默認打開底層datareader的功能。我測試了EF 5與數據讀取器的性能,當從100萬張的表中拉出50 k行時,數據讀取器的性能提高了33%。 EF 6與數據讀取器的時間幾乎完全相同。 – NightOwl888 2015-02-23 20:00:36
@ NightOwl888 - 有趣。我們仍然有一個使用EF5的遺留應用程序,但除此之外,我對此版本沒有太多的瞭解。我試過尋找,但所有我能找到的是,框架的初始加載時間在版本之間得到了改進。如果你找到一個鏈接,我會有興趣瞭解更多。 ?這也可能是由於EF6生成了更高效的查詢? – Igor 2015-02-23 20:05:31