繁体   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