Ich arbeite mit NHibernate und muss bis zu 2 Millionen Zeilen abrufen und verarbeiten. Im Idealfall könnte ich jede Zeile - eine nach der anderen - verarbeiten, ohne dass NHibernate alle 2 Millionen Zeilen auf einmal in den Speicher lädt (denn das tut weh).
Ich würde es vorziehen, eine IEnumerable zu erhalten, die den Datenleser iterativ für jedes Lesen aufrufen würde, so dass ich die gelesenen Daten verarbeiten könnte - dann verwerfen. Auf diese Weise spare ich eine Menge Speicher und kann die Ergebnisse viel schneller verarbeiten. Ich könnte die Leistung auch durch Multithreading und/oder die Verwendung von PLinq verbessern.
Ist dies mit ICriteria von NHibernate möglich? Alles, was zurückgegeben wird, scheint IList zu sein, und vollständig geladen, bevor die Auflistungsreferenz weitergegeben wird. Warum IList anstelle von IEnumerable?
Ich meine nicht "lazy" im traditionellen Sinne, den NHibernate in Bezug auf das Laden von Child- oder Parent-Objekten verwendet. Ich möchte eine lazy IEnumerable, d. h. eine Möglichkeit, eine IEnumerable aus einem ICriteria-Objekt zu erhalten . ICriteria hat nur eine List()-Methode, die die Ergebnisse in eine ArrayList lädt.