我正在开发一个系统,在工作时,将使用新ID更新DB中的给定行数。
目前我有大约900万行,在选择了一小部分数据(~10k项目)后,我想迭代这些项目并用新ID更新一列。
我目前所做的工作但是太慢而无法使用,所以我需要以某种方式改进它。这是代码,这最初是一个ForEach循环,但我读到'For'循环上的数组更快,所以我尝试了没有太大改进。
public string UpdateWithNewWidgetId(List<string> allTheWidgetIds, int newWidgetId)
{
var repoPerson = _repositoryFactory.CreateRepository<Person>();
try
{
var person = repoPerson.GetAll(x => fieldToUpdate.Any(val => x.WidgetId == val)).ToArray;
for (int i = 0; i < person.Length; i++)
{
person[i].WidgetId= newWidgetId;
repoPerson.Update(person[i]);
}
repoPerson.SaveChanges();
}
catch (Exception ex)
{
//log error
}
因此,repoPerson很快就会返回大约10K项的列表,但是foreach循环需要很长时间,然后SaveChanges(这只是一个Context.SaveChanges())需要更长的时间。
最初我在foreach中有SaveChanges并且认为这是我的问题,但是从循环中删除它并没有改进。
答案 0 :(得分:1)
答案 1 :(得分:-1)
尝试添加事务,应该加快上下文SaveChanges事件
using (Context context = new Context())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
...yours code
context.SaveChanges();
dbContextTransaction.Commit();
}
}