[英]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個小事務,這是使用ORM的一種“俏皮”方式,通常被認為是一種反模式。
從NHibernate 3.2開始,批處理已在內部實現,我建議您在NHibernate中查看批處理更新 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.