阅读后this article我决定仔细研究一下我使用 Dapper 的方式。
我在空数据库上运行此代码
var members = new List<Member>();
for (int i = 0; i < 50000; i++)
{
members.Add(new Member()
{
Username = i.toString(),
IsActive = true
});
}
using (var scope = new TransactionScope())
{
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
scope.Complete();
}
大约花了20秒。即每秒 2500 次插入。不错,但考虑到博客达到了 45k 插入/秒,也不算太好。在 Dapper 中是否有更有效的方法来做到这一点?
此外,作为旁注,通过 Visual Studio 调试器运行此代码需要超过 3 分钟!我认为调试器会减慢速度,但我真的很惊讶看到这么多.
更新
所以这个
using (var scope = new TransactionScope())
{
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
scope.Complete();
}
还有这个
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
两者都花费了 20 秒。
但这花了 4 秒!
SqlTransaction trans = connection.BeginTransaction();
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members, transaction: trans);
trans.Commit();
最佳答案
使用这种方法,我能实现的最好成绩是 4 秒内记录 50k 条记录
SqlTransaction trans = connection.BeginTransaction();
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members, transaction: trans);
trans.Commit();
关于performance - 使用 Dapper 进行批量插入花费的时间比预期的要长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689779/