Bonjour à tous,
Je cherche à optimiser les performances de mon code, et j'ai du mal, alors je viens ici pour découvrir les bonnes pratiques. Le but de mon application est de tracer des vecteurs, j'ai donc utilisé pour cela la classe DrawingVisual. Tous mes tests passaient bien jusqu'à ce qu'un utilisateur débarque avec des fichiers de 50Mo en m'expliquant qu'il fallait en tracer à peu près 40k. Du coup, en terme de performance, je suis au alentour de 25 secondes, ce qui est beaucoup trop.
J'ai donc cherché à utiliser des outils pour savoir où mon code péchait le plus, et je suis tombé sur cette page, dans lequel il est mentionné que Visual fait partie des classes qui sont très lourde.
Débutant complet en WPF, mon code pour l'instant consistait à créer un visual par objet à tracer, ce qui n'était visiblement pas une bonne solution. Ni une ni deux, je reprends tout mon code et crée un unique objet visual, et je demande à mes vecteurs d'écrire dedans. Pour ça, je m'y prenais ainsi :
using (DrawingContext dc = monUniqueVisual.RenderOpen()) {
Ce qui n'est visiblement pas la bonne technique, puisque seul un vecteur est apparu (j'imagine que c'est le dernier tracé et qu'à chaque fois que je fais RenderOpen, ça efface les autres). Du coup, je décide de faire mon using au tout début et de ne transmettre non pas mon visual, mais mon DrawingContext. Mauvaise idée : c'est dix mille fois plus lent de mettre tout le code dans le using...
Quelqu'un a une idée... ?
Partager