EF 6 SaveChangesAsync()运行缓慢

时间:2014-09-12 16:54:08

标签: c# mysql entity-framework

我有以下方法:

    public async Task<int> AddCallDetail(List<CallDetail> addCallDetail)
    {
        int added = 0;
        using (InContactEntities context = new InContactEntities())
        {
            DateTime minDateTime = (from c in addCallDetail select c.StartDateTime).Min();
            DateTime maxDateTime = (from c in addCallDetail select c.EndDateTime).Max();

            var l = from d in addCallDetail
                    join c in context.CallDetails.Where(cc => cc.StartDate >= minDateTime && cc.StartDate <= maxDateTime)
                    on d.MasterContactID equals c.MasterContactID into dc
                    from c in dc.DefaultIfEmpty()
                    select new { cOne = d, cTwo = c == null ? null : c };

            List<CallDetail> callDetail = (from d in l where d.cTwo == null select d.cOne).ToList();

            if (callDetail != null && callDetail.Count != 0)
            {
                try
                {
                    context.CallDetails.AddRange(callDetail);
                    added = await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.InnerException.InnerException.Message);
                    added = -1;
                }
            }
        }
        return added;
    }

这会将我们的电话系统api中的呼叫信息添加到我构建的数据库中。这将一次处理最多50,000条记录,但平均而言,它将处理10,000-15,000条记录。无论记录数量多少,linq表达式都将在2秒内持续运行,但行added = await context.SaveChangesAsync()需要很长时间才能处理。很长一段时间我的意思是大约20分钟才能增加11K行。现在呼叫是异步和等待的,减少了一些影响,但我仍然希望尽可能快地插入记录。有什么建议吗?

它插入的表确实有两个外键,两个外键都被检查以确保在插入之前存在记录。

0 个答案:

没有答案