83 votes

Pourquoi l'insertion d'entités dans EF 4.1 est-elle si lente par rapport à ObjectContext ?

En gros, j'insère 35000 objets dans une transaction :

 using(var uow = new MyContext()){
  for(int i = 1; i < 35000; i++) {
     var o = new MyObject()...;
     uow.MySet.Add(o);
  }
  uow.SaveChanges();
}

Cela prend une éternité ! Si j'utilise le sous-jacent ObjectContex t (en utilisant IObjectAdapter ), c'est toujours lent mais prend environ 20s. Il semble que DbSet<> effectue des recherches linéaires, ce qui prend un temps carré...

Quelqu'un d'autre voit ce problème ?

12voto

Zax Points 94

Petit test empirique avec EF 4.3 CodeFirst :

Suppression de 1000 objets avec AutoDetectChanges = true : 23 sec

Suppression de 1000 objets avec AutoDetectChanges = false : 11 sec

1000 objets insérés avec AutoDetectChanges = true : 21 sec

1000 objets insérés avec AutoDetectChanges = false : 13 sec

12voto

Maxvt Points 58

Dans .netcore 2.0, cela a été déplacé vers :

context.ChangeTracker.AutoDetectChangesEnabled = false;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X