Retour sur les convertisseurs génériques

Il y a quelques mois je vous avais présenté un article sur des convertisseurs génériques réutilisables. Si vous ne l’avez pas lu vous pouvez le lire ici.

Je finissais cet article par une note sur les performances de ceux-ci, inférieurs à ceux des convertisseurs classiques. Depuis j’ai effectué quelques améliorations que je partage avec vous.

Le convertisseur booleanToSomething est l’un des plus utilisé, j’utilise maintenant pour celui-ci le code suivant :

[pastacode lang= »cpp » message= »BoolConverter » highlight= » » provider= »manual »]

[/pastacode]

En définissant celui-ci dans mon xaml de la façon suivante :

[pastacode lang= »markup » message= »BoolConverter » highlight= » » provider= »manual »]

[/pastacode]

Je vous conseille d’utiliser celui-ci à la place du convertisseur de base exposé au tout début du premier article. Déclarer ses valeurs de retour dans des propriétés et non à chaque appel permet de gagner en flexibilité et en performance (+40% minimum).

 

Pour les cas utilisant le convertisseur de base j’ai divisé ceux-ci en fonction du type de la valeur convertie. J’évite ainsi les opérations de parsing gourmandes en mémoire.

[pastacode lang= »cpp » message= »BaseConverter » highlight= » » provider= »manual »]

[/pastacode]

Pour gagner en performance je met en cache les différents cas dans un dictionnaire .

Cas d’un convertisseur prenant en entrée des int :

[pastacode lang= »cpp » message= »IntConverter » highlight= » » provider= »manual »]

[/pastacode]

Défini selon le xaml suivant :

[pastacode lang= »markup » message= »definition du IntConverter » highlight= » » provider= »manual »]

[/pastacode]

J’observe un gain en performance de 40% par rapport à la version plus générique de celui-ci, il est néanmoins toujours 50% plus gourmand qu’un convertisseur basique. A ne pas utiliser pour afficher de grandes collections donc !

 

Pour résumer : 

  • Je reste sur l’idée de convertisseurs réutilisables avec un type de donnée renvoyé défini dans le xaml
  • Afin de gagner en performance j’utilise un convertisseur par type d’entrée ainsi que des valeurs typées dans le xaml
  • Les convertisseurs utilisant les listes de cas restent gourmands en performances et sont à éviter pour les collections d’objets.
  • Que ce soit pour un convertisseur générique ou classique pensez à définir vos valeurs de retour dans des propriétés, vous éviterez de les redéfinir à chaque appel ce qui augmentera les performances de vos convertisseurs.

Thierry,

One thought on “Retour sur les convertisseurs génériques

  1. Pingback: Convertisseurs génériques et réutilisables | Le blog Ai3Le blog Ai3

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.