为什么NHibernate AutoFlush检查如此昂贵?

时间:2009-11-13 01:59:14

标签: nhibernate

在实践中,我们发现默认的NHibernate(v2.0& 2.1)FlushMode = Auto非常昂贵。回顾一下NHibernate源代码表明,用于确定需要刷新内容的算法依赖于在会话中循环遍历所有实体的强力,这种情况发生在事务中的每个查询运行中。

在某些生产场景中,对多个项目进行了更新,通过多次查询,我们看到FlushMode = Auto与FlushMode = Commit相比,该过程延长了100倍。

执行涉及多个更新,多个查询等的“复杂”会话逻辑时使用FlushMode的任何想法/建议/最佳做法。

有关在nHibernate中优化AutoFlush算法的任何想法吗?

1 个答案:

答案 0 :(得分:6)

这种缓慢是一个已知问题,并在NH中作为NH-1365/GitHib Issue 857

进行跟踪

NH中有三种冲洗模式:

  • FlushMode.Auto =需要时刷新(在提交时和查询之前,如果需要)。这是默认设置。
  • FlushMode.Commit =仅提交NH交易时刷新
  • FlushMode.Never =从不冲洗(直到调用Flush)。这将still go to DB插入使用本机(标识)PK生成器的实体。