Estoy trabajando con NHibernate y necesito recuperar y procesar hasta 2 millones de filas. Idealmente, podría procesar cada fila, una a la vez, sin NHibernate cargando los 2 millones en memoria a la vez (porque, ya sabes, eso duele).¿Es posible obtener un IEnumerable perezoso de una consulta de NHibernate usando ICriteria?
Preferiría obtener un IEnumerable que llamaría iterativamente al lector de datos para cada lectura, así podría procesar la lectura de datos y luego descartarla. Al hacerlo de esta manera, guardo una gran cantidad de memoria y comienzo a procesar los resultados mucho más rápido. También podría mejorar el rendimiento a través de subprocesos múltiples y/o el uso de PLinq.
¿Esto es posible con NHibernate's ICriteria? Todo lo que devuelve parece ser IList y completamente cargado antes de entregar la referencia de recopilación. ¿Por qué IList en lugar de IEnumerable?
No me refiero a "perezoso" en el sentido tradicional que NHibernate usa con respecto a la carga de objetos secundarios o secundarios. Quiero un perezoso IEnumerable que significa de alguna manera obtener un IEnumerable de un objeto de ICriteria. ICriteria solo tiene un método List() que carga los resultados en una ArrayList.
Pensé que cuando hacía un IEnumerable perezoso en NHibernate comenzaba a consultar la base de datos una fila a la vez. Puede ser más fácil bajar al lector de datos de ADO.Net si tiene que lidiar con tantas filas. – Min