Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    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)

    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 :

    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

  2. #2
    Expert Confirmé
    Avatar de GuruuMeditation
    Homme Profil pro Olivier Matis
    .Net Architect
    Inscrit en
    octobre 2010
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Matis
    Âge : 39
    Localisation : Belgique

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

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 602
    Points : 3 212
    Points
    3 212

    Par défaut

    Bizarre...tu as essayé avec NoTracking?
    Microsoft MVP : Windows Platform

    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)

  3. #3
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    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

  4. #4
    Modérateur
    Avatar de h2s84
    Homme Profil pro Holty Samba SOW
    Développeur .NET
    Inscrit en
    mars 2007
    Messages
    3 021
    Détails du profil
    Informations personnelles :
    Nom : Homme Holty Samba SOW
    Âge : 29
    Localisation : Sénégal

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

    Informations forums :
    Inscription : mars 2007
    Messages : 3 021
    Points : 5 839
    Points
    5 839

    Par défaut

    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 FAQ 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

  5. #5
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    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.

  6. #6
    Modérateur
    Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2006
    Messages
    754
    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 : 754
    Points : 1 057
    Points
    1 057

    Par défaut

    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

  7. #7
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    Je descends de 23 à 17sec au mieux.

  8. #8
    Modérateur
    Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2006
    Messages
    754
    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 : 754
    Points : 1 057
    Points
    1 057

    Par défaut

    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

  9. #9
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    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

  10. #10
    Modérateur
    Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2006
    Messages
    754
    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 : 754
    Points : 1 057
    Points
    1 057

    Par défaut

    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

  11. #11
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    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.

  12. #12
    Expert Confirmé Avatar de iberserk
    Homme Profil pro Bruno IGNACE
    Architecte de base de données
    Inscrit en
    novembre 2004
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Nom : Homme Bruno IGNACE
    Âge : 32
    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 602
    Points : 2 635
    Points
    2 635

    Par défaut

    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
    MCTS Database Administration

  13. #13
    Membre Expert
    Homme Profil pro Arnaud
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2006
    Messages : 1 538
    Points : 1 835
    Points
    1 835

    Par défaut

    Oui, mapping direct

  14. #14
    Modérateur
    Avatar de h2s84
    Homme Profil pro Holty Samba SOW
    Développeur .NET
    Inscrit en
    mars 2007
    Messages
    3 021
    Détails du profil
    Informations personnelles :
    Nom : Homme Holty Samba SOW
    Âge : 29
    Localisation : Sénégal

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

    Informations forums :
    Inscription : mars 2007
    Messages : 3 021
    Points : 5 839
    Points
    5 839

    Par défaut

    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 FAQ 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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •