IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Gros problème de performance


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Par défaut Gros problème de performance
    Bonjour à tous,

    Je développe une application en WPF et je rencontre un gros problème de performance pour le chargement des données. (environ 2 min).

    J'ai essayé d'appliquer le design pattern MVVM mais vu le résultat que j'obtiens, j'ai un doute sur ce que j'ai fait. Je vous explique ma démarche.


    J'ai un ViewModel que je vais appeller ObjetViewModel avec beaucoup de propriétés (> 50)
    J'ai un autre ViewModel que je vais appeler AllObjetViewModel et qui contient une observableCollection de ObjetViewModel (ListObjetViewModel).



    Dans AllObjetViewModel, je récupère la liste des objets de la base par linq
    et pour chaque objet récupéré je créé un ObjetViewModel que j'ajoute à ListObjetViewModel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Exemple :
    public AllObjetViewModel()
    {
        var req = from ...
        List temp = req.toList();
        foreach(objet o in temp)
         {
               ListObjetViewModel.add(new ObjetViewModel(o));
         }
    }
    Et après je mets l'observableCollection en itemsResource de la listView.


    Donc je voulais savoir si mon raisonnement était correct car j'ai de gros problème de performance pour le chargement des données.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 62
    Par défaut
    Ta requête linq est déjà enumerable, tu n'as pas besoin de la transformer en list pour itérer dessus normalement.
    On peut avoir plus d'info sur la requete linq d'ailleurs ?
    Moi, j'ai récemment eu le même problème que toi, et il se trouve que c'était du au piètre performance de linq justement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Par défaut
    Merci d'avoir répondu.
    Ma requête est toute basique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    var req = from c in dc.LigneCommande
                              orderby c.Projet
                              where c.Solde == false
                              select c;
    J'avais essayé les types anonymes mais j'avais pas vu d'amélioration.

    Ensuite dans mon ViewModel, j'initialise les propriétés en utilisant les relations des objets.
    Par exemple dans le constructeur du ViewModel je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomClient = LigneCommande.Client.Nom;

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 62
    Par défaut
    Tu utiles Linq to sql et charges depuis une BDD, ou LigneCommande est une collection d'objet que tu as toi-même créée ?
    Combien de lignes/éléments environ dans LigneCommande ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Par défaut
    Je charge de la BDD, dc c'est le nom de mon datacontext.
    La table LigneCommande est liée à 6 autres tables et je récupère environ 50 propriétés au final pour mon ViewModel.

    J'ai actuellement 2000 lignes dans la BDD pour les tests mais j'en aurais beaucoup plus.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 62
    Par défaut
    Ca ne devrait pas être aussi long, vu la simplicité.
    Compare le temps d'exécution de la requête, et le temps de création de tes vm.

    Fais un
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                DateTime start = DateTime.Now;
     
                    var req = from c in dc.LigneCommande
                              orderby c.Projet
                              where c.Solde == false
                              select c;
     
                Console.WriteLine(req.Count());
     
                DateTime stop = DateTime.Now;
     
                Console.WriteLine((stop - start).TotalMilliseconds);

    Et tu devrais modifier comment tu ajoutes à ta liste
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListObjetViewModel = new ObservableCollection<ObjetViewModel>(req.Select(o => new ObjetViewModel(o)));
    pour créer ta collection d'un coup, on ne sait jamais.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    LinqToSql est très opaque et à l'époque où je le testais (il y a deux ans ou plus), j'étais déçu par les performances : peut être que je ne m'y suis pas plongé suffisamment après...
    Du coup, j'étais repassé sur du ADO.Net.
    T'auras peut-être plus de précisions sur les performances de LinqToSql et d'autres pistes sur le forum Linq

    Sinon les problèmes de performances peuvent aussi se situer côté WPF. Lorsque tu affiches de nombreux enregistrements dans une liste, il faut s'assurer que celle-ci est en mode virtualisation.

Discussions similaires

  1. Gros problème de performance
    Par Syl_20 dans le forum OpenGL
    Réponses: 15
    Dernier message: 16/12/2007, 18h19
  2. GROS problèmes de performances
    Par fda dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/08/2007, 14h02
  3. [Tomcat] Gros problèmes de performance
    Par Tourix dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 04/06/2007, 15h58
  4. [XNA] GROS problèmes de performances
    Par kawash dans le forum XNA/Monogame
    Réponses: 12
    Dernier message: 20/02/2007, 23h03
  5. Gros problème de performance
    Par steelidol dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/11/2006, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo