Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > Entity Framework
Entity Framework Forum d'entraide sur le développement avec le modèle d'accès aux données Entity Framework de Microsoft.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/11/2012, 16h21   #1
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Par défaut Performances horribles sur certaines requêtes Entity

Hello,

on constate que certaines listes d'objets prennent 20-25 secondes à être générées via EF.

Via SQL Server Profiler, on retrouve une durée de cet ordre de grandeur (par ex 21 sec), avec, à titre d'information, 1461 pages lues et 60 000 enregistrements présents dans la table pour la requête concernée.

La requête exécutée est un bête select, même pas de jointure...

Si on prend la requête affichée par SQL Server Profiler et qu'on l’exécute dans management studio, la requête prend 0 à 1 sec...

Qu'est ce qui peut expliquer ça ?

EDIT :

Je refais un test avec tous les appels via c#. Les résultats (en ms, mesuré dans le code via un Stopwatch)

Citation:
EF : 22227,2778 //Context.Sequence.ToList()
SQL : 2,3137 //SqlCommand sqlCom = new SqlCommand("select * from Sequence", cnx);
EF Store Query : 46,4585 //contextNv.ExecuteStoreQuery<Sequence>("select * from Sequence");
Si je commence par faire un appel via ExecuteStoreQuery, j'obtiens ceci :

Citation:
EF Store Query : 685,0155
EF : 22816,2245
SQL : 2,3236
Donc je vois bien le temps pris pour la compilation de la requête, mais aucun impact sur la requête via ToList
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2012, 17h54   #2
GuruuMeditation
Expert Confirmé
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
.Net Architect
Inscription : octobre 2010
Messages : 1 351
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : .Net Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 1 351
Points : 2 867
Points : 2 867
Envoyer un message via MSN à GuruuMeditation
Bizarre...tu as essayé avec NoTracking?
__________________
Microsoft MVP : Visual C#

MCPD - Windows Phone Developer
MCPD - Windows Developer 4

http://www.guruumeditation.net

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 09h49   #3
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Code :
context.Sequence.MergeOption = System.Data.Objects.MergeOption.NoTracking;
Je passe de requêtes qui prennent 22 sec à des requêtes de 16 secondes, mesuré au Stopwatch
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 10h00   #4
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 748
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2007
Messages : 2 748
Points : 5 196
Points : 5 196
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
On sait que ça rame au niveau d'Entity Framework alors je te conseille de regarder tout ça en utilisant l'outil DotTrace JetBrain (une version démo est dispo et largement suffisant pour te faire ton avis). Il y a aussi EFProf que tu peux utiliser.
__________________
Consultant .Net chez SoftFluent
Découvrir notre produit CodeFluent Entities

Adhérer à l'association Fier d'être développeur
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 11h55   #5
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
EF Profiler m'affiche la requête générée et me dit que la requête sql a duré 3ms, pour une durée totale de 20s.
Le débogueur visual studio indique qu'il passe tout son temps dans le ToList sans être plus précis.
Avec JetBrain, on observe qu'il passe la majorité de son temps dans des GetInternalRelatedEntity, la table présente 13 FK.
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2012, 10h43   #6
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : février 2006
Messages : 731
Points : 1 150
Points : 1 150
Bonjour,

A mon avis il charge toute ton arborescence d'objets, c'est une peu long...
Si j'étais toi, j'essayerai :
Code :
context.ContextOptions.LazyLoadingEnabled = true;
Bon dév.
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

N'oubliez pas de avant de
Pas de question techniques par MP, c'est contre la philosophie du forum
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 10h09   #7
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Je descends de 23 à 17sec au mieux.
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 11h52   #8
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : février 2006
Messages : 731
Points : 1 150
Points : 1 150
C'est un début, je te conseille ce lien

Bon courage
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

N'oubliez pas de avant de
Pas de question techniques par MP, c'est contre la philosophie du forum
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 13h39   #9
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Avec le mergeOptions Notracking en plus, je descends à 12sec. Mais ça reste éloigné de la seconde pour une StoreQuery. Il faut que je voie pour les relations, c'est ce qui semble ncore consommer beaucoup de temps, malgré les null
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 13h47   #10
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : février 2006
Messages : 731
Points : 1 150
Points : 1 150
Ce lien peut être intéressant aussi...

Mais pourquoi ne fais-tu pas :

Code :
contextNv.Sequences.ToList();
ici, j'ai utilisé sequences mais il peut très bien s'appeler autrement chez toi
au lieu d'une requête?
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

N'oubliez pas de avant de
Pas de question techniques par MP, c'est contre la philosophie du forum
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 14h13   #11
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Code :
EF : 22227,2778 //Context.Sequence.ToList()
C'est mon code actuel d'utiliser le ToList, ce que je chereche à améliorer. la requête était pour comparer les perfs.

Merci pour le lien, je vais y jeter un œil.
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 21h08   #12
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 514
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 514
Points : 2 756
Points : 2 756
Envoyer un message via MSN à iberserk
Un détail:
A quoi est mappé SEQUENCE dans ton EDMX? directement à la table SEQUENCE?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 14h02   #13
Arnard
Membre Expert
 
Homme Arnaud
Développeur .NET
Inscription : avril 2006
Messages : 1 386
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 1 386
Points : 1 582
Points : 1 582
Oui, mapping direct
Arnard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 14h51   #14
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 748
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2007
Messages : 2 748
Points : 5 196
Points : 5 196
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Au vu des solutions déjà proposées et que ça ne règle toujours pas ton problème, peut-être que tu devrais penser à générer les vues pour EF. Entity Framework Power Tools te permet de générer assez facilement sans passer par la ligne de commande.
__________________
Consultant .Net chez SoftFluent
Découvrir notre produit CodeFluent Entities

Adhérer à l'association Fier d'être développeur
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h20.


 
 
 
 
Partenaires

Hébergement Web