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);
}
これは、挿入レコード用の簡単なコードです。マルチインサートは非同期で使用する
ログには、保存された1レコードが時々1秒以上費やされたことが示されています。 00:00:1のセーブ00.0089301
過ごした1つのレコードの保存00.0239751
:00:00:過ごした1つのレコードの保存00.0180819
:00:00:過ごした1つのレコードの保存
レコードは過ごし:00:00:00:00:1つのレコードを過ごし保存00.0116161
00.0736537
O保存00:00:00.0711155
過ごした1つのレコードの保存:00:00:00:00:03.1613426
過ごした1件のレコードを保存午前0時:03.1703909
一つのレコードを過ごし保存過ごしNEレコード: 0:00:1つのレコードを過ごし保存07.8137410
:00:00:過ごした1つのレコードの保存07.8156325
:00:00:過ごした1つのレコードの保存03.1727551
0:1つのレコードの保存07.8179925
は、使用済み:00:00 00.0074952
しかし、私のDBAは、彼は実行のいずれかの警告をキャッチしていないと述べた:00:00:1つのレコード保存00.0079545
は、使用済み4秒以上の時間。
なぜ1秒以上のレコードが挿入されるのですか?
私はado.netへの挿入方法を変更すると良いでしょうか?
あり、接続プールの設定で問題が...により、接続のプールには、競合を得ることに待っている、あなたがいることを追加してログインしますSQL実行時間の時間...一度あなたが接続を持ってログのタイミングを... –
あなたの先端に感謝!やってみます。 – user1485954