Ber*_*ard 6 nhibernate performance
我的问题是,当从数据库中获取记录时,NHibernate会呈指数级增长.我有一个请求,基本上从一个非常大的数据库中提取所有数据,以便在报告中使用.
我想,因为我不能一次性获得所有记录,因为记录集太大了,我想尝试分解它.基本上我正在迭代索引的范围,即.记录id x到y,然后y + 1到z,依此类推.
每个结果集约为10megs.前20个左右拉动每个不到一分钟,然后在下一次拉动时,需要10分钟,然后是30分钟和1小时.我在那里停止了程序,不想等到下一次拉动.我从我离开的索引开始再次运行程序,再次,前20个左右的拉动非常快,然后由于一些奇怪的原因,有一个重大的减速.
任何帮助将不胜感激.
小智 8
NHibernate为你做了很多工作,这可能会减慢它的速度.它保留了你在会话中拉出的对象,这基本上是一级缓存.当您运行查询时,它将检查该组对象以查看是否需要将它们刷新回数据库(可能您已经更改了它们,以便它们现在可以作为查询的结果!).因此,一个强大的可能性是,您的查询正在秘密地遍历大量对象,试图在将查询发送到数据库之前弄清楚它应该写入数据库的内容.
如果是这种情况,您可以尝试定期session.Clear()或session.Evict(object)从缓存中删除对象,以便NH不会尝试使数据库与它们保持一致.如果您希望NH"注意"它们,您可以随后重新附加对象.
编辑:或使用无状态会话.这是一个例子.
| 归档时间: |
|
| 查看次数: |
3275 次 |
| 最近记录: |