[英]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.