阅读本文后,我决定仔细研究一下我使用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();
}
Run Code Online (Sandbox Code Playgroud)
花了大约20秒钟.这是2500插入/秒.不错,但考虑到博客达到45k插入/秒,也不是很好.在Dapper中有更有效的方法吗?
另外,作为旁注,通过Visual Studio调试器运行此代码需要3分钟!我认为调试器会慢一点,但我很惊讶地看到了这么多.
UPDATE
所以这
using (var scope = new TransactionScope())
{
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
还有这个
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
Run Code Online (Sandbox Code Playgroud)
都花了20秒.
但这需要4秒!
SqlTransaction …Run Code Online (Sandbox Code Playgroud) 我想做批量插入。A 是一个 ID,B 是一个 ID 列表。我的插入语句看起来像这样,但它是错误的。我如何重写它才能工作?我能想到的唯一解决方案是在语句外使用 foreach 循环
.Execute(@"insert into MyTable(a,b) select @a, @b", new {a, b})
Run Code Online (Sandbox Code Playgroud)