保存到数据库需要花费太多时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存到数据库需要花费太多时间相关的知识,希望对你有一定的参考价值。
我必须在数据库中插入一些记录,但它需要花费太多时间大约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)。它要快得多,因为它会绕过上面提到的脏检查,并且首先查看会话的第一级缓存。
但是像其他人说的那样,你似乎是删除和对象,然后立即把它放回去 - 也就是说它通常应该是更新而不是删除+插入。
以上是关于保存到数据库需要花费太多时间的主要内容,如果未能解决你的问题,请参考以下文章
BLE 在将数据从 iOS 7.1 发送到 iOS 8 时花费了太多时间