Почему Dapper быстрее, чем Dapper plus? - PullRequest
0 голосов
/ 24 апреля 2020

С учетом простого теста:

Использование Dapper:

for (int i = 0; i < 10000; i++)
{
      Connection.Execute("UPDATE User SET Name = 'Max'");
}

Продолжительность этой операции измеряется с помощью StopWatch следующим образом:

RunTime 00: 00: 37.51 Продолжительность: 00: 00: 37.5150734 Продолжительность в миллисекундах: 37515

Использование Dapper plus:

User user = new User();
user.Name = "Max";
DapperPlusManager.Entity<User>().Table("User");
for (int i = 0; i < 10000; i++)
{
       Connection.BulkUpdate(user);
}

Продолжительность этой операции измеряется с помощью секундомера следующим образом:

Время выполнения 00: 00: 39,85 Продолжительность: 00: 00: 39.8553959 Продолжительность в миллисекундах: 39855

Я провел этот тест в другом сценарии ios, и Dapper всегда быстрее, чем Dapper plus

Вопрос ясен: почему Dapper быстрее, чем Dapper Plus? Что может вызвать такую ​​вещь?

Примечание: я использую Sqlite с структурой сущности

1 Ответ

3 голосов
/ 24 апреля 2020

почему Dapper быстрее, чем Dapper Plus? Что может вызвать такую ​​вещь?

a) BulkUpdate, как следует из его названия, предназначено для массовых обновлений (то есть обновления нескольких строк одновременно). Вы называете это по одному. Вы хотите сделать однократный вызов, а не 10 000, чтобы получить преимущества.

b) Последний код, вероятно, нуждается в отражении (например, чтобы понять, что есть свойство Name) ) таким образом, что предыдущий код не делает. Это повлечет за собой некоторые затраты производительности.

Исправление а) почти наверняка то, что вам нужно сделать. Кроме того, используйте более значимый тест, при котором вы обновляете 10 000 различных строк - не одну и ту же строку 10 000 раз (поскольку с вашим текущим кодом самое простое решение - выполнить его один раз, а не 10 000 раз), но я подозреваю, что это не то, что вы хотите).

...