Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么NHibernate自动冲洗支票如此昂贵?_Nhibernate - Fatal编程技术网

为什么NHibernate自动冲洗支票如此昂贵?

为什么NHibernate自动冲洗支票如此昂贵?,nhibernate,Nhibernate,实际上,我们发现默认的NHibernate(v2.0&2.1)FlushMode=Auto非常昂贵。查看NHibernate源代码表明,用于确定需要刷新哪些内容的算法依赖于在会话中通过所有实体的强力循环,这在事务中运行的每个查询中都会发生 在一些对许多项进行更新的生产场景中,通过多个查询,我们发现使用FlushMode=Auto的过程比使用FlushMode=Commit的过程长100倍 在执行涉及多个更新、多个查询等的“复杂”会话逻辑时使用FlushMode的任何想法/建议/最佳实践 关于优化

实际上,我们发现默认的NHibernate(v2.0&2.1)FlushMode=Auto非常昂贵。查看NHibernate源代码表明,用于确定需要刷新哪些内容的算法依赖于在会话中通过所有实体的强力循环,这在事务中运行的每个查询中都会发生

在一些对许多项进行更新的生产场景中,通过多个查询,我们发现使用FlushMode=Auto的过程比使用FlushMode=Commit的过程长100倍

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


关于优化nHibernate中的自动刷新算法有什么想法吗?

这种缓慢是一个已知的问题,NH as对此进行了跟踪

NH中有三种冲洗模式:

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

相关问题:是的。。。实际上是同一个问题:)谢谢,很高兴知道这是一个已知的问题。遗憾的是,这是一个知道的问题超过一年!我知道有很多方法可以重新安排代码以限制执行的刷新次数。尽管如此,Nhibernate中的刷新性能似乎比它应该的要慢得多。还有
刷新模式。始终
:在执行任何查询之前刷新会话,代价高昂。还有
FlushMode.Unspecified
,它是一个特殊的空值;不确定它是否真的可以使用。