在实践中,我们发现默认的 NHibernate (v2.0 & 2.1) FlushMode=Auto 非常昂贵。查看 NHibernate 源代码表明,确定需要刷新的内容的算法依赖于循环遍历会话中所有实体的强力,并且这种情况发生在事务中运行的每个查询中。
在某些对许多项目进行更新的生产场景中,通过多个查询,我们发现 FlushMode=Auto 的过程比 FlushMode=Commit 的过程长 100 倍。
在执行涉及多个更新、多个查询等的“复杂”会话逻辑时使用 FlushMode 的任何想法/建议/最佳实践。
关于优化 nHibernate 中的 AutoFlush 算法有什么想法吗?
这种缓慢是一个已知问题,在 NH 中跟踪为NH-1365/GitHib 问题 857 https://github.com/nhibernate/nhibernate-core/issues/857
NH 共有三种冲水模式:
- FlushMode.Auto = 在需要时刷新(如果需要,在提交时和查询之前)。这是默认设置。
- FlushMode.Commit = 仅在 NH 事务提交时刷新
- FlushMode.Never = 从不刷新(直到调用 Flush)。这会还是去DB https://stackoverflow.com/questions/432087/nhibernate-flushmode-on-save插入使用本机(身份)PK 生成器的实体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)