【问题标题】:nHibernate multiple transactions are slowing downnHibernate 多个事务正在减慢
【发布时间】:2017-05-15 19:49:57
【问题描述】:

以前我在一个事务中有 500 次操作持续时间过长,所以我不得不为 foreach 块中的 500 个事务更改它。

我正在检查每个事务的时间(我使用秒表),我注意到每个 foreach 循环(每个新事务)都比前一个循环长一点。它从约 80 毫秒提高到约 400 毫秒。我的代码:

foreach (var single in data)
{
    using (var tran = _session.BeginTransaction())
    {
       // operations with "single" usage - _session.Save() or _session.Update()
       //...
       tran.Commit();
    }
}

我做错了什么?我应该在 tran.Commit() 之后处理、刷新一些东西吗?

【问题讨论】:

标签: c# nhibernate transactions save commit


【解决方案1】:

Nhibernate 会跟踪会话中每个实体的状态,因此每次循环都需要检查越来越多的实体。

通常的答案是为每个事务创建一个新会话。

这里的问题是你有 500 个小事务,这是使用 ORM 的一种“闲聊”方式,通常被认为是一种反模式。

从 NHibernate 3.2 开始,批处理已在内部实现,我建议您查看 Batch Update in NHibernate 了解详细信息。

【讨论】:

  • 在你写它的时候,我注意到 _session 被“统计”属性中的元素膨胀了。每次交易后,我都进行了 _session.Clear(),看起来它让我很开心,但我不知道使用它是否会产生一些严重的后果。
  • post 中已经对此进行了一些讨论,您的问题与此重复。
  • 搜索时没找到。我在事务之间没有任何依赖关系,所以看起来我可以使用它。谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多