XmlSerializer : lenteur de la première initialisation et comment y remédier
A la première initialisation d'une instance de XmlSerializer pour un type, le constructeur déclenche la génération, compilation et le chargement d'un assembly (temporaire) contenant le code de sérialisation/désérialisation dont XmlSerializer a besoin. Cette génération rend bien évidemment la première initilisation (beaucoup) plus longue.
Cette action n'est effectuée qu'une seule fois par execution de l'application (ou du moins une seule fois par domaine d'application) car il y a une gestion de cache pour les assemblys ainsi générés.
Vous pouvez cependant palier à ce "problème" en utilisant l'outil sgen (XML Serializer Generator) : il vous permet de générer l'assembly contenant déjà le code nécessaire au fonctionnement du sérialiseur pour les types d'un assembly, et ainsi économiser les phases de génération et compilation.
Pour approfondir : j'en parler plus haut d'une mise en cache, hors ce n'est pas le cas pour tous les constructeurs de la classe XmlSerializer : il semble que ce ne soit le cas que pour le constructeur XmlSerializer (Type, String) ainsi que XmlSerializer (Type) qui repose sur ce dernier.
Un post de Tess sur le sujet est assez interessant a garder en tête au moment de manipuler XmlSerializer, ou un type l'utilisant : .NET Memory Leak: XmlSerializing your way to a Memory Leak
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :