由于我的代码需要很长时间才能处理。我分析了代码和&搜索了占用大量时间的代码部分。
在我的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
,以便执行代码所需的时间更短。
答案 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;
}