之前我在一次交易中有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()之后冲洗一些东西吗?
答案 0 :(得分:1)
Nhibernate跟踪会话中每个实体的状态,因此每次循环时都需要检查越来越多的实体。
通常,答案是为每笔交易创建一个新会话。
这里的问题是你有500个小交易,这是一个" chatty"使用ORM的方式,通常被认为是反模式。
来自NHibernate 3.2批处理内部已经完成,我建议您查看Batch Update in NHibernate了解详细信息。