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 :

Afficher +/- 10 000 lignes sur canvas / performances


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Afficher +/- 10 000 lignes sur canvas / performances
    Bonjour,

    Je cherche une solution en WPF pour afficher environ 10 000 lignes sur un canvas en WPF. En GDI je ne rencontrais pas de problème de performances tandis qu'en WPF c'est très lent.

    Au début j'ai essayé liste de "System.Windows.Shape.Line" mais c'était très long, j'ai alors essayé des System.Windows.Media.LineGeometry (avec un freeze) mais le résultat n'est pas génial (peut être car j'ai 10'000 childrens dans le canvas).

    Enfin j'ai essayé Polyline avec une liste de points (donc un seul children), l'affichage initial semble rapide mais l'évènementiel rend inutilisable l'interface graphique.

    Bref, quel serait l'objet le plus performant pour afficher une liste de lignes qui se suivent ? J'ai sinon pensé à faire une Bitmap par InteropBitmap.

    Merci.

  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,

    10 000 lignes, ça commence à faire

    Je ne sais pas quel méthode de tracé est la plus appropriée, tu as déjà testé pas mal de solutions en plus.

    Par contre, il y a peut-être une piste qui consiste à utiliser un Canvas virtualisable :
    http://blogs.msdn.com/jgoldb/archive...pf-canvas.aspx

    Si tu testes cette solution, dis nous ce que ça vaut .

  3. #3
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Il faut que tu crées une class héritant de Canvas. Tu peux ainsi overrider la méthode OnRender.
    http://msdn.microsoft.com/en-us/libr....onrender.aspx

  4. #4
    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 meziantou Voir le message
    Il faut que tu crées une class héritant de Canvas. Tu peux ainsi overrider la méthode OnRender.
    http://msdn.microsoft.com/en-us/libr....onrender.aspx
    Oui mais là, ca commence à devenir poilu

    Implémenter la virtualisation me semble être la meilleure idée.

  5. #5
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    si tu cherches à faire un truc du genre courbier, j'ai eu le problème il y a quelques temps ; je l'ai résolu en utilisant un objet Path pour chaque courbe, dont la propriété Data était renseignée avec un StreamGeometry (le plus performant). Une fois les éléments chargés, je faisais une sorte de copie d'écran de la surface de dessin que j'affichais par-dessus, en passant le reste à Visibility=Hidden. En faisant comme ça j'ai pu faire un contrôle qui affiche plusieurs dizaines de courbes contenant jusqu'à 10000 points chacune sans problème.

  6. #6
    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
    Citation Envoyé par MetalGeek
    Une fois les éléments chargés, je faisais une sorte de copie d'écran de la surface de dessin que j'affichais par-dessus, en passant le reste à Visibility=Hidden. En faisant comme ça j'ai pu faire un contrôle qui affiche plusieurs dizaines de courbes contenant jusqu'à 10000 points chacune sans problème.
    C'est pas bête du tout. Par contre, tu perd le côté vectoriel, non ? Peut-être que tu n'implémentait pas de zoom (tu me diras, c'est peut-être pas l'intérêt de atoutsweb non plus).

  7. #7
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Si , il y a une fonction de zoom, avec possibilité de revenir en revenir en arrière (boutons précédent/suivant comme sur un navigateur web), mais par contre je recoustruis chaque courbe à chaque fois (mais ça va très vite, il n'ya pas de ralentissement).

    En axe des abscisses j'ai des horodatages (affichés formatés, mais stockés en system.long au format UTC), je déduis la zone zoomée avec les coordonnées des System.Point correspondants (le zoom se fait avec un rectangle de sélection). Pareil pour chaque axe en ordonnées, du coup je construis les courbes en fonction de la sélection.

  8. #8
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Ouah, ca a l'air bien sympa ton truc !
    Tu l'as fait dans quel cadre ?

  9. #9
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    c'est une partie d'un logiciel qui sert à suivre l'évolution des procédés dans les stations d'épurations. Je récupère des données venant du process (par OPC principalement), je les qualifie (unités de mesure avec conversions, modèles prédéfinis...), je fais des calculs (fonctions statistiques, agrégations...), je les stocke (format propriétaire pour les valeurs horodatées + XML pour les metadonnées), et après on peut les requêter sous forme de bilans Excel, ou dans des grilles, ou dans des graphes, d'où l'histoire des courbes.

    Mais là on s'écarte du sujet du post... atoutsweb, tu en es où ?

Discussions similaires

  1. comment afficher une seul ligne sur un texte
    Par MR-SMOOT dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 03/08/2014, 18h08
  2. Afficher numéro de ligne sur Eclipse
    Par tit_oune dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 24/10/2011, 15h03
  3. Afficher 560 000 lignes dans une JTable -> out of memory
    Par Mattorre dans le forum Composants
    Réponses: 5
    Dernier message: 11/06/2010, 12h07
  4. Réponses: 23
    Dernier message: 20/05/2009, 13h47
  5. Réponses: 2
    Dernier message: 24/04/2006, 14h56

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