我正在使用 NHibernate,需要检索和处理多达 200 万行。理想情况下,我可以处理每一行 - 一次一行 - 无需 NHibernate 一次加载所有 200 万个内存(因为,你知道,这很痛苦)。
我更喜欢获得一个 IEnumerable,它会为每次读取迭代调用数据读取器,以便我可以处理读取的数据 - 然后丢弃它。通过这样做,我节省了大量内存,并开始更快地处理结果。我还可以通过多线程和/或使用 PLinq 来提高性能。
NHibernate 的 ICriteria 可以做到这一点吗?它返回的所有内容似乎都是 IList,并且在传递集合引用之前已完全加载。为什么是 IList 而不是 IEnumerable?!
我不是指 NHibernate 在加载子对象或父对象时使用的传统意义上的“懒惰”。我想要一个 惰性 IEnumerable 意味着从 ICriteria 对象中获取 IEnumerable . ICriteria 只有一个 List() 方法,它将结果加载到一个 ArrayList 中。
最佳答案
ICriteria 没有任何返回 IEnumerable 的方法,但是 IQuery does .
关于.net - 是否可以使用 ICriteria 从 NHibernate 查询中获取惰性 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362911/