gpt4 book ai didi

c# - NHibernate 在自动刷新事件上表现不佳?

转载 作者:太空狗 更新时间:2023-10-30 01:28:00 26 4
gpt4 key购买 nike

首先让我说,我知道 NH 不建议使用批量操作。但是有点兴趣,我想知道为什么这么贵。对于我系统中的 200 个对象,需要 4 分钟,其中 90% 以上的时间花在了 DefaultAutoFlushEventListener.OnAutoFlush(感谢 RedGate Profiler)。太疯狂了。我想知道是否有人编写了一个自定义的 DefaultAutoFlushEventListener,它可以暂时解决这种大型重复更新的障碍。

更新:实际上批量更新不是问题,而是事务和查询的 FlushMode 问题。但是,NH 冲洗时到底在做什么?

最佳答案

这是一个很好的。我在一个事务中进行了每个更新,并且在该事务中有一个查询,它是二级缓存的,但导致了刷新。如果您在事务中有查询,并且 FlushMode=Auto(基本上没有关闭),您会得到一个刷新。这是非常昂贵的,特别是如果您在 session 缓存中有很多对象,我们就是这样做的。将此查询从事务中移出,查询时间增加了 5 倍。此外,使整个事务成为事务而不是单个事务是另一个很大的提升,因为每个 transaction.commit 都会导致刷新。更新 1000 个对象只需要不到 30 秒,我不好意思说这是以前的时间。啊遗留代码。

更新:在进一步调查中,我已将 FlushMode 设置为 Commit 用于我们特定的嵌套事务模型。无需赘述太多细节,我们有一个特定的事务模型,它在使用嵌套“逻辑”调用时考虑嵌套事务。对于遗留应用程序,我们不想一刀切地设置它。这种情况下的具体问题是结合使用事务和将 FlushMode 设置为自动(或始终)。

关于c# - NHibernate 在自动刷新事件上表现不佳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com