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

标签 c# nhibernate

首先让我说,我知道 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/

相关文章:

c# - 不同域的登录页面

C#动态编译字符串和.cs文件

c# - 如何避免重命名属性和 Automapper 的问题

asp.net-mvc - nHibernate、ASP.NET MVC、s#arp 架构和多个相同的数据库

nhibernate - PostgreSQL 全文搜索与 NHibernate.Search 通过 Lucene.Net

c# - 异步任务配置中未抛出异常

c# - EF LINQ to SQL,除以零错误,生成的查询将参数置于错误的顺序

c# - 单元测试HQL查询

sql-server-2008 - 在未提交读的情况下使用 TransactionScope - SQL 中的 with (nolock) 是否必要?

c# - 覆盖长文本字符串的流利 NHibernate nvarchar(MAX) 而不是 nvarchar(255)