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

Paw*_*wel 9 nhibernate

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

在某些生产场景中,对多个项目进行了更新,我们看到使用FlushMode = Auto与FlushMode = Commit相比,该过程要长100倍.

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

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

zvo*_*kov 6

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

NH有三种冲洗模式:

  • FlushMode.Auto =需要时刷新(在提交时和查询之前,如果需要).这是默认值.
  • FlushMode.Commit =仅在提交NH事务时刷新
  • FlushMode.Never =从不刷新(直到调用Flush).在插入使用本机(标识)PK生成器的实体时,这仍然会转到DB.