看完之后本文 https://www.gamasutra.com/view/news/170502/Indepth_SQL_Server__High_performance_inserts.php我决定仔细研究一下我使用 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分钟!我认为调试器会稍微减慢速度,但看到这么多我真的很惊讶。
UPDATE
So this
using (var scope = new TransactionScope())
{
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
scope.Complete();
}
and this
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();