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 :

Demande de conseils pour une application plus réactive


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut Demande de conseils pour une application plus réactive
    Bonjour,
    Actuellement je suis sur un projet qui demande de stocker beaucoup de données. Typiquement pour les afficher j'utilise une datagrid et mes données sont stocker en base.
    La question que je me pose c'est au niveau de la quantité de données que je puisse afficher.
    Il faudrait que ma datagrid je puisse afficher prendre jusqu'a 30000 lignes sur 20 colonnes ce qui est assez énorme pour du WPF je le conçois.
    cependant cela fonctionne mais c'est lent lors du scrolling, connaissez-vous des moyens de rendre mon application plus réactive ?

  2. #2
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Une possibilité (peut-être moins ergonomique) est d'afficher les enregistrements par centaine(s) et d'ajouter un bouton "Précédent" et un bouton "Suivant" qui videra la DataGrid et chargera la centaine précédente ou suivante suivant le bouton cliqué.

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Implémenter le Paging comme le conseille binoo est une bonne idée. Sinon, pour éviter les problèmes lors du scroll, tu peux activer le défilement différé (si tu es en .NET 3.5 SP1):

  4. #4
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Ok je vais regarder ces deux astuces, je n'ai pas fini d'implémenter l'application mais c'est lors de test que je me suis rendu compte du phénomène de lag sur le scrolling et d'ailleurs particulièrement quand ma datagrid était associé à un dictionnaire de ressource pour le design.
    J'en profite pour te dire que ton blog est génial, le post sur la conversion de picture windowsform en image WPF m'a bien aidé

  5. #5
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Je reviens car en fait, actuellement rien que le bindding de ma "ObservableCollection" dans ma datagrid est très très lent juste pour une centaine de lignes.
    Mon application est un gestionnaire de tag/Musique dans le genre de Itunes. Pour l'instant sa fonctionne bien mais vraiment il me semble que je devrais pouvoir optimiser l'affichage. L'autre probleme étant que je dois parser chacun de mes objet pour crée la collection puisque qu'ils contienne des clés étrangère qui peuvent même être null.

    Le fait est que le défilement différé ou Paging me font perdre de l'ergonomie (ma référence étant encore itunes au final)

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JediMaster Voir le message
    L'autre probleme étant que je dois parser chacun de mes objet pour crée la collection puisque qu'ils contienne des clés étrangère qui peuvent même être null.
    Il est p-e là ton pb de lenteur: si ton algo de parsing est lent, alors l'affichage de la collection, au final, le sera aussi...

  7. #7
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    bah voila comment je fais : J'ai un musicManager qui appelle toute les music contenues dans la base comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                ObsMusicFile = new ObservableCollection<MusicFile>();
     
                KusickDataClassesDataContext db = new KusickDataClassesDataContext();
                var q = from u in db.Musics
                             select u;
     
                List<Music> resultmusiclist = q.ToList();
     
                foreach (var result in resultmusiclist)
                {
                    MusicFile musicFile = new MusicFile(result);
                    ObsMusicFile.Add(musicFile);
                }
    Apres il je fais mon bidding tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid1.ItemsSource = musicManagement.ObsMusicFile;
    Et mon parsing, bah dans l'ensemble cela correspond à ça il y a trois cas différent à gérer (je met un exemple de chaque) :

    1er cas - cas normal la valeur se trouve dans table directement.

    2eme cas - cas d'une clé faisant référence direct a un table contenant elle, l'information cherchée. Ici je suis obligé de vérifier qu'il y a bien une référence à une table(<> null).

    3eme cas - cas d'une clé faisant appel à une table étrangère donc multiple association. La Propriété est un Arraylist (J'ai lut que c'était plus rapide que les vectors mais non synchronisé, ce dont je n'ais pas besoin).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public MusicFile(Music music)
    {
       //1er cas
       Comment = music.comment;
    
       //2eme cas
       if (music.Album != null)
                      Album = music.Album.name;
                  else
                      Album = "";
    
       //3eme cas
       var result_Music_AlbumArtists = music.Music_AlbumArtists;
       foreach (var myMusic_AlbumArtists in result_Music_AlbumArtists)
       {
                  AlbumArtists.Add(myMusic_AlbumArtists.Artist.name);
       }
    
    //...//
    
    }
    Donc pense tu qu'il y a des améliorations possibles au niveau de ce parsing ?
    Et sinon tu aurais des bouquin ou site a me conseiller pour ce qui est des problème "courant" d'algorithme ?

  8. #8
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Vérifie aussi une chose : les temps d'accès à la base de données.

    J'ai l'impression que tu utilises LinqToSql. Quand je l'ai testé (en faisant une génération automatique du modèle et sans configuration particulière), je me suis vite aperçu que ce n'était pas très optimisé (nombre de requête déclenché en pagaille... du au multiple relations que j'avais). Faute de temps, je n'ai pas cherché à voir si on pouvait optimisé.

    Pour le vérifier simplement active le log de LinqToSql.

    nb: perso, j'ai pas été convaincu par LinqToSql (après j'ai pas poussé non plus). Sinon il y a LinqToEntity et je n'ai pas testé...

  9. #9
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    J'ai beau chercher je ne trouve pas comment faire pour activer les logs
    j'ai chercher ici et la mais je n'arrive pas à utiliser le DataTips

  10. #10
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Pour afficher les Log (dans la fenetre de Sortie en mode Debug (F5)), il faut ajouter cette ligne là :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pour tracer les requêtes SQL exécutées avec la fenêtre Output (sortie)
    monDataContext.Log = Console.Out;

    Tu verras toutes les requêtes effectuées et tu devrais pouvoir voir si c'est plutôt acceptable ou non

  11. #11
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    J'ai lancé le debug dans Watch1 j'ai ajouté dans la colonne name db.Log et dans value Console.Out mais je ne vois rien et db.log est a null

    PS: désolé j'avais pas activer la sortie, donc j'en conclus en voyant défiler les requête qu'effectivement c'est plutôt très lent, par contre il n'y rien qui indique le temps pour chaque requête.
    Ce qui m'a étonné aussi est le fait que moi je ne fait qu'une requête sur ma base mais que linq de sont coté en fait beaucoup (plus d'une cinquantaine) et donc mon affichage est bien ralentit par la les requêtes

  12. #12
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Il faut mettre la ligne dans le code après avoir initialisé le DataContext par exemple.
    http://msdn.microsoft.com/fr-fr/library/bb386961.aspx

    Tu supprimeras le code par la suite.

    Et le Log apparait comme je l'ai dit dans Visual Studio dans la fenêtre de sortie lorsque tu es en mode Debug (F5).

  13. #13
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Bonjour,
    Pour info, j'ai essayé sur une appli de remplir un grid avec environ 100 000 enregistrements, mais 5 ou 6 colonnes si mes souvenirs sont bons, et pas de soucis majeur.
    Le temps de chargement n'étaient pas trop long, et le scrolling très fluide.
    Par contre, j'étais sur le Framework 3.5 SP1 avec l'EntityFramework, et c'est vrai que celui ci génère bcp moins de requetes que le linqToSql.
    Bon courage
    " Je préfère comprendre les gens qui ne me comprennent pas "

Discussions similaires

  1. Demande de conseil pour une récupération de données
    Par le-roy_a dans le forum Administration
    Réponses: 8
    Dernier message: 21/08/2008, 17h11
  2. Demande de conseils pour une récupération de données
    Par le-roy_a dans le forum Installation
    Réponses: 1
    Dernier message: 18/08/2008, 15h29
  3. Conseils pour une application de réservation
    Par kiwie dans le forum Débuter
    Réponses: 3
    Dernier message: 08/06/2008, 01h23
  4. conseils pour une application à interface web
    Par stdebordeau dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2008, 12h54
  5. Besoin de conseils pour une application
    Par peredodu dans le forum Access
    Réponses: 9
    Dernier message: 05/03/2006, 11h18

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