我正在使用NHibernate,需要檢索和處理多達200萬行。理想情況下,我可以一次處理每一行 - 而不需要NHibernate一次加載200萬個內存(因爲,你知道這很痛)。是否有可能從使用ICriteria的NHibernate查詢中獲取惰性IEnumerable?
我寧願得到一個IEnumerable,它會爲每次讀取迭代地調用數據讀取器,以便我可以處理數據讀取 - 然後丟棄它。通過這樣做,我節省了大量的內存,並開始處理結果的速度更快。我還可以通過多線程和/或使用PLinq來提高性能。
這可能與NHibernate的ICriteria?它返回的所有內容似乎都是IList,並在收集參考文獻之前完全加載。爲什麼IList而不是IEnumerable?!
我並不是說傳統意義上的「懶惰」,NHibernate使用它來加載子對象或父對象。我想要一個懶惰IEnumerable從ICriteria對象獲取IEnumerable的某種意義。 ICriteria只有一個List()方法,它將結果加載到ArrayList中。
我以爲當你在NHibernate中做了一個懶惰的IEnumerable時,你開始一次查詢數據庫的一行。如果你必須處理很多行,那麼下載到ADO.Net的數據讀取器可能會更容易。 – Min 2008-12-12 18:45:44