Après la lecture de cet article j'ai décidé de regarder de plus près à la façon dont j'ai été l'aide de Dapper.
J'ai couru ce code sur une base de données vide
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();
}
il a fallu environ 20 secondes. C'est 2500 insertions/seconde. Pas mauvais, mais pas génial non plus en considérant le blog a été la réalisation de 45k insertions/seconde. Est-il un moyen plus efficace pour ce faire, dans Dapper?
Aussi, comme une note de côté, l'exécution de ce code par le débogueur Visual Studio a pris plus de 3 minutes! J'ai pensé que le débogueur serait-il ralentir un peu, mais j'ai été vraiment surpris de voir que beaucoup.
Mise à JOUR
Donc, ce
using (var scope = new TransactionScope())
{
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
scope.Complete();
}
et ce
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
tous les deux pris 20 secondes.
Mais cela a pris 4 secondes!
SqlTransaction trans = connection.BeginTransaction();
connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members, transaction: trans);
trans.Commit();