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 :

Accélerer le binding avec le thread UI


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut Accélerer le binding avec le thread UI
    Bonjour à tous,

    J'ai un UserControl contenant un graphique de chez DevExpress qui est bindé avec la vue modèle correspondante.
    Seulement, ma liste de point est assez conséquente et fait rame mon application lors du binding.
    Par exemple, mes animations sont saccadées.
    Je pense donc que mon thread UI est un peu retardé par la mise à jour du graphique....

    Quelqu'un aurait-il une idée de comment faire pour optimiser cela ?
    Je pensais essayer de générer un autre thread uniquement pour ce UserControl mais je crois que ce n'est pas trop possible...

    Par avance, merci à ceux qui auraient des idées !!

    @+

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    La liste de points elle-même peut être générée sur un autre thread mais, effectivement, la mise à jour du graphique ne peut être faîte que sur le thread UI. Donc, si c'est bel et bien cette dernière étape qui est problématique, je ne vois que ces quelques solutions potentielles :
    * Mettre à jour moins souvent le graphique
    * Réduire le nombre de points en amont en éliminant ceux qui seront confondus.
    * Réorganiser le layout pour que graphique n'ait pas à être mis à jour lors des animations.
    * Regarder du côté de la documentation de ce composant pour voir s'il y a plusieurs moyens de réaliser le binding et si des conseils sont donnés en termes de performances. Notamment, si les points sont dans une ObservableCollection, remplace t-on la collection par une autre (une seule notification) ou bien utilise t-on Clear() puis une série de Add() (avec autant de notifications que de points) ? La première solution, avec une liste préalablement générée sur un autre thread, serait peut-être plus intéressante.

  3. #3
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Re,

    Merci de ton retour rapide.
    J'ai effectivement un traitement dans un backgroundworker qui met remplis une liste.
    Une fois terminé, le traitement va recopier la liste dans ma collection avec une new ObservableCollection<Point>(MaListe) et ensuite je lève un event OnPropertyChanged pour notifier que ma collection à changer.

    Si je débranche le binding sur le itemsource du graph dans le xaml, mon application ne rame plus, mais si je le remet c'est le drame...

    Je suis bloqué car les points sont déjà optimisés (impossible d'en supprimer ou autre, j'ai déjà un mécanisme d'optimisation car 8000 points rafraichis toutes les secondes quasiment) et mes animations sont assez simples : zoom sur un bouton quand la souris passe dessus par exemple...

    Bref, j'espère trouver une méthode pour libérer le thread UI au maximum...

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    L'animation du bouton est-elle toujours saccadée ou uniquement si cela intervient en même temps qu'une des mise à jour de la liste ? Dans le premier cas on doit pouvoir y faire quelque chose (positionnement absolu du graphique et taille constante pour qu'il n'entre plus dans le mécanisme de layout).

    Sinon, l'autre solution serait, plutôt que d'utiliser un composant apparemment pas prévu pour un tel nombre de points, de créer toi-même le tien, basé sur le rendu d'un bitmap sur un thread d'arrière-plan (soit en utilisant GDI soit en changeant les pixels "à la main" en unsafe).

  5. #5
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Mon animation est saccadée uniquement lors du binding...
    Je vais essayer de passer par une diminution du temps de rafraichissement si je reste sur ce composant car en refaire un moi même, c'est assez long sauf si j'arrive à trouver une source ....

Discussions similaires

  1. Des problemes avec ces threads <pthread.h>
    Par nasamad dans le forum GTK+ avec C & C++
    Réponses: 26
    Dernier message: 07/07/2006, 12h46
  2. [Threads] Actions continues avec des threads
    Par MiJack dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 10/10/2005, 17h32
  3. Réponses: 5
    Dernier message: 10/05/2005, 10h22
  4. [langage] Perl a t'il été compiler avec les threads
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2005, 15h00

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