我正在使用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