performance - 使用 Dapper 进行批量插入花费的时间比预期的要长

标签 performance sqlbulkcopy dapper

阅读后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/

相关文章:

ruby-on-rails - Heroku 上的简单 Rails 应用程序性能

php - 在 PHP 和 MySQL 中对小列表(10 项)进行排序然后返回?

c# - SQL Bulkcopy YYYYMMDD问题

c# - 如何从 Dapper 查询而不是 default(T) 返回 null?

stored-procedures - 在 Dapper 中使用存储过程有什么缺点吗?

c# - System.Data.SqlClient.SqlConnection 不包含使用 dapper 和 c# 查询的定义

javascript - 在隐藏元素之前我应该​​检查可见性吗?

python - 如何从用于弹性插入的python代码改进parallel_bulk?

postgresql - 使用 PostgreSQL COPY 时为 "ERROR: extra data after last expected column"

.net - 在 SqlBulkCopy 之前截断