2011-02-17 5 views
1

Je sais que EF n'est pas génial pour les opérations par lots, mais j'essaie de comprendre un problème que nous avons.Entity Framework context.SaveChanges() lent - SQL Profiler inclus

Nous bouclons un fichier texte pour lequel 5 000 produits doivent être insérés dans notre base de données.

En appelant context.SaveChanges() et en regardant le profileur je vois:

Audit Connexion 0MS

RPC: Terminé (la requête réelle pour insérer le produit) Affichage en 9 lectures et une durée de 0 MS

audit Déconnexion 2750MS

Pourquoi le journal d'audit en prenant 2+ secondes? La requête SQL réelle ne prend pas de temps du tout, pas plus que la connexion d'audit.

Est-ce le surdébit d'EF? Quelqu'un at-il des suggestions? La seule chose sur laquelle j'ai trébuché est les vues pré générées, mais je ne sais pas si cela va aider ou non.

+0

Cela signifie-t-il qu'il exécute 5000 insertions dans un délai de 2,75 secondes? –

Répondre

0

La déconnexion elle-même ne prend pas 2 secondes, profiler affiche la durée de la session sur l'événement de déconnexion, il était donc 2750 ms de connexion à la déconnexion.

Y a-t-il quelque chose qui se passe dans l'application avant d'appeler la déconnexion qui pourrait prendre un certain temps? Que se passe-t-il entre le moment des insertions et la déconnexion?

+0

Je me suis dit que ce n'était pas vraiment un serveur SQL, j'aurais dû mieux formuler ma question. Comment puis-je déboguer l'infrastructure pour savoir ce qui cause le retard? J'ai corrigé ceci en utilisant simplement Linq To Sql - j'ai obtenu une importation par lot en prenant 4 heures à 56 secondes en utilisant 'dated' orm :) – izip

Questions connexes