nHibernate多个交易正在放缓

时间:2017-05-15 11:38:11

标签: c# nhibernate transactions save commit

之前我在一次交易中有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()之后冲洗一些东西吗?

1 个答案:

答案 0 :(得分:1)

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

通常,答案是为每笔交易创建一个新会话。

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

来自NHibernate 3.2批处理内部已经完成,我建议您查看Batch Update in NHibernate了解详细信息。