Я работаю с NHibernate и мне нужно извлечь и обработать до 2 миллионов строк. В идеале я мог бы обрабатывать каждую строку - по одной за раз - без загрузки NHibernate сразу всех 2 миллионов в памяти (потому что, как вы знаете, это больно).
Я бы предпочел получить IEnumerable, который бы вызывал считыватель данных итеративно для каждого чтения, чтобы я мог обработать считанные данные - затем отбросить их. Делая это таким образом, я экономлю нагрузку на память и начинаю обрабатывать результаты намного быстрее. Я мог бы также улучшить производительность за счет многопоточности и / или использования PLinq.
Возможно ли это с помощью ICibereria NHibernate? Все, что он возвращает, кажется IList и полностью загружено перед передачей ссылки на коллекцию. Почему IList вместо IEnumerable?!
Я не имею в виду «ленивый» в традиционном смысле, который NHibernate использует в отношении загрузки дочерних или родительских объектов. Я хочу, чтобы ленивый IEnumerable в некотором смысле означал получение IEnumerable из объекта ICriteria . ICriteria имеет только метод List (), который загружает результаты в ArrayList.