Linq Update需要很长时间才能处理

时间:2016-05-18 09:55:30

标签: c# sql sql-server performance linq

由于我的代码需要很长时间才能处理。我分析了代码和&搜索了占用大量时间的代码部分。

在我的listTempInOut中有超过100000条记录。 SDetails也有更多记录。我想在模型中update 2个字段。以下是代码: -

var dataUpd = (from A in tempSS
                               from B in SDetails
                               from C in listTempInOut
                               where A.Id == B.Id
                               && A.Shift == B.Shift && A.Employee == C.Employee && A.SDate == C.Time_Date1
                               select new { A.SId, B.Status, C }).ToList();
                foreach (var row in dataUpd)
                {
                    row.C.Time_Field1 = row.ShiftId;
                    row.C.Time_Field2 = row.Status.ToString();
                }

上述代码change can i do中的improve the performance,以便执行代码所需的时间更短。

1 个答案:

答案 0 :(得分:0)

实体框架中的更新可能非常慢,尝试在您的上下文中将AutoDetectChangesEnabled属性设置为false(请参阅下面的代码,我不确定您的上下文实际调用了什么,因此我称之为“myContext”)。完成更新后,您必须记住将其设置为true,因此我建议将代码包装在try / finally块中。

        try
        {
            myContext.Configuration.AutoDetectChangesEnabled = false;
            var dataUpd = (from A in tempSS
                           from B in SDetails
                           from C in listTempInOut
                           where A.Id == B.Id
                           && A.Shift == B.Shift && A.Employee == C.Employee && A.SDate == C.Time_Date1
                           select new { A.SId, B.Status, C }).ToList();
            foreach (var row in dataUpd)
            {
                row.C.Time_Field1 = row.ShiftId;
                row.C.Time_Field2 = row.Status.ToString();
            }
        }
        finally
        {
            myContext.Configuration.AutoDetectChangesEnabled = true;
        }