我有一个循环,在这里被删减,它执行员工记录的导入,如下所示:
var cts2005 = new Cts2005Entities();
IEmployeeRepository repository = new EmployeeRepository();
foreach (var c in cts2005.Candidates)
{
var e = new Employee();
e.RefNum = c.CA_EMP_ID;
e.TitleId = GetTitleId(c.TITLE);
e.Initials = c.CA_INITIALS;
e.Surname = c.CA_SURNAME;
repository.Insert(e);
}
实际上还有几个字段,总共有九个类似GetTitleId(c.TITLE)
上面的查找。这些代码都是这样的:
private List<Title> _titles;
private Guid GetTitleId(string titleName)
{
ITitleRepository repository = new TitleRepository();
if (_titles == null)
{
_titles = repository.ListAll().ToList();
}
var title = _titles.FirstOrDefault(t => String.Compare(t.Name, titleName, StringComparison.OrdinalIgnoreCase) == 0);
if (title == null)
{
title = new Title { Name = titleName };
repository.Insert(title);
_titles.Add(title);
}
return title.Id;
}
除了实体类型不同外,所有repository.Insert()
调用都如下所示:
public void Insert(Employee entity)
{
CurrentDbContext.Employees.Add(entity);
CurrentDbContext.SaveChanges();
}
而且所有的PK都是Guid。我知道这可能是一个小问题,但我没想到它对这样的小体积产生如此大的影响。
我还没有对这个例程进行任何调整或优化,因为它只是针对我的小型测试数据库,但昨天我被迫意外导入了 6000 条记录。到最后,这个处理速度已经减慢到每条记录大约 1 秒,这非常令人沮丧。如果没有一些调整,我不会期望高速,但没有那么低。
我的方法有什么明显的、严重的错误吗?