nHibernate 多个事务正在变慢

nHibernate multiple transactions are slowing down

以前我在一个事务中有 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() 之后处理、冲洗一些东西吗?

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

通常,解决这个问题的方法是为每个事务创建一个新会话。

这里的问题是你有 500 个小事务,这是 "chatty" 使用 ORM 的方式,通常被认为是反模式。

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