Массовые вставки занимают больше времени, чем ожидалось Использование Dapper

После прочтения этой статьия решил поближе взглянуть на то, как я использую Dapper.

Я запустил этот код на пустой базе данных

var members = new List();
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 вставок в секунду. Неплохо, но и не отлично, учитывая, что блог достиг 45 000 вставок в секунду. Есть ли более эффективный способ сделать это в 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();

63
задан Groo 25 May 2018 в 15:19
поделиться