簡體   English   中英

保存到數據庫需要太多時間

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM