[英]Saving to database taking too much time
我必须在数据库中插入一些记录,但是这花费了大约20-25秒的太多时间。 我有两种方法,第一种方法包含一个带有列表类型参数的foreach
循环,第二种方法具有一些Linq查询来保存和删除一些记录。 代码如下。
public void InsertAssignment(List<TIVGroupItem> Item)
{
using (var tr = session.BeginTransaction())
{
try
{
foreach (var item in Item)
{
ak_tIVGroupItemSelector_Insert(item);
}
tr.Commit();
}
catch (Exception ex)
{
tr.Rollback();
CusException cex = new CusException(ex);
cex.Write();
}
}
}
第二种方法
public void ak_tIVGroupItemSelector_Insert(TIVGroupItem GroupItem)
{
try
{
var result = (from i in session.Query<TIVGroupItem>()
where i.Id == GroupItem.Id
select i).SingleOrDefault();
if (result != null)
session.Delete(result);
session.Save(GroupItem);
}
catch (Exception ex)
{ CusException cex = new CusException(ex);
cex.Write();
}
}
项目列表包含一些记录。 因此,我该如何改善此类问题的表现。 有什么方法可以提高我的性能以将记录保存到数据库中?
使用默认的NHibernate设置,每次查询NHibernate时都会检查会话是否包含任何可能影响查询结果的更改。 因此,随着会话中活动对象的数量增加,如果您重复查询,性能将会下降。
避免循环查询。 最好早些查询多个对象。
此外,您似乎正在通过主键加载对象,对此应使用session.Get(id)。 它的速度要快得多,因为它将绕过上面提到的脏检查,并且还将首先查看会话的一级缓存。
但是,就像其他人所说的那样,您似乎正在删除并成为对象,然后立即将其放回原位-即,通常它应该是更新而不是delete + insert。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.