相关疑难解决方法(0)

使用Dapper,批量插入的时间比预期的要长

阅读本文后,我决定仔细研究一下我使用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)

performance sqlbulkcopy dapper

64
推荐指数
3
解决办法
3万
查看次数

使用Dapper删除超过2100行(通过ID)的正确方法

我正在尝试使用Dapper支持我的服务器应用程序的数据访问.

我的服务器应用程序有另一个应用程序,它以每分钟400的速度将记录丢入我的数据库.

我的应用程序将它们分批拉出,处理它们,然后从数据库中删除它们.

由于数据在我处理时继续流入数据库,因此我没有好的方法可以说delete from myTable where allProcessed = true.

但是,我确实知道要删除的行的PK值.所以我想做一个delete from myTable where Id in @listToDelete

问题是,如果我的服务器停机甚至6分钟,那么我有超过2100行要删除.

由于Dapper接受我的@listToDelete并将每个变成一个参数,我对delete的调用失败了.(导致我的数据清除进一步落后.)

在Dapper处理这个问题的最佳方法是什么?

注意:我已经查看了Tabled Valued Parameters,但从我所看到的情况来看,它们并不是非常高效.这段我的建筑是我系统的瓶颈,我需要非常快.

sql-server parameters dapper

10
推荐指数
2
解决办法
1万
查看次数