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会更好吗?
答案 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/