
Envoyé par
DonQuiche
Tu utilises mal WPF (et peut-être les autres) et tu as une mauvaise perception de ce qu'est une carte graphique.
Donc une carte graphique n'est pas un périphérique magique capable d'accélérer de petites opérations de rendu. Au contraire c'est une gros accélérateur situé très loin du CPU, entre lesquels il y a un bus avec une latence de plusieurs microsecondes, et ayant sa propre mémoire. On y stocke les primitives une fois pour toutes en essayant de ne jamais les lire ou les modifier, et on lui envoie aussi peu de commandes de rendu que possible ("batch, batch, batch" - on groupe les primitives ayant les mêmes shaders et textures en un seul gros maillage de milliers ou centaines de milliers de triangles).
Pour ces raisons WPF est optimisé pour un mode déféré : à chaque fois que tu crées une primitive de dessin celui-ci doit générer le maillage et le shader qui seront utilisés par la carte graphique puis tenter de batcher dynamiquement, de l'insérer son graphe de rendu, etc. Par ailleurs WPF expose des objets de haut-niveau capables de supporter des événements, de détecter des clics, etc.
En résumé : on crée les primitives une seule fois, on ne les change que lorsqu'il le faut, on crée aussi peu de primitives que possibles, et on laisse WPF se débrouiller autant que possible.
Cela dit ça ne doit pas être le seul problème pour obtenir 361ms de latence. TU n'aurais pas inclus un temps de démarrage ou fait autre chose de très lent ?
Partager