多插入使用异步等待

时间:2017-02-20 05:47:37

标签: c# sql-server

public async Task BulkInsert(List<WagerInfo> wagers)
{
    var tasks = wagers.Select(async x => await insert(x));

    await Task.WhenAll(tasks);
}
private Task insert(WagerInfo wager)
{
    var sw = new Stopwatch();

    sw.Start();

    using (var db = new DBContext())
    {
        db.Wagers.Add(wager);

        await db.SaveChangesAsync();
    }

    sw.Stop();

    log("save one record spent : " + sw.Elapsed);
}

这是插入记录的简单代码。

但是日志显示保存的一条记录有时花费超过一秒。

  

保存一条记录:00:00:00.0180819

     

保存一条记录:00:00:00.0239751

     

保存一条记录:00:00:00.0089301

     

保存一条记录:00:00:00.0116161

     

保存一条记录:00:00:00.0736537

     

保存一条记录:00:00:00.0711155

     

保存一条记录:00:00:03.1613426

     

保存一条记录:00:00:03.1703909

     

保存一条记录:00:00:03.1727551

     

保存一条记录:00:00:07.8156325

     

保存一条记录:00:00:07.8137410

     

保存一条记录:00:00:07.8179925

     

保存一条记录:00:00:00.0079545

     

保存一条记录:00:00:00.0074952

但是我的DBA说他在4秒钟内没有发现执行时间的警报。

为什么有一些记录插入超过1秒?

如果我将插入方法更改为ado.net会更好吗?

2 个答案:

答案 0 :(得分:0)

针对同一事务中的多个插入优化了保存更改。

将列表拆分为500或1000个插入块。

然后在Task insert

之前添加List <WagerInfo>来呼叫您的SaveChangesAsync

答案 1 :(得分:0)

你是对的。当您需要将大型记录插入数据库时​​,应使用ADO.Net。

您可以访问此链接以参考,我的朋友:)

https://www.exceptionnotfound.net/dapper-vs-entity-framework-vs-ado-net-performance-benchmarking/