Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de Gaël Covain }

Actualités

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 :
Posted: dimanche 25 février 2007 00:34 par coq
Classé sous : , , ,

Commentaires

iso8859 a dit :

C'est assez connu comme pb. Les generics .NET 2.0 répondent assez bien à la problématique.

Voir ma classe XMLSerialize

<T> http://www.codyx.org/snippet_serialisation-deserialisation-objet-vers-xml_2.aspx#109

Rémi

# février 25, 2007 09:52

coq a dit :

Il n'empêche qu'il y a quand même la première initialisation pour le type au premier accès au membre static, et donc cette fameuse phase de génération/compilation.

On retombe dans la même problématique, et Sgen pourra t'apporter un plus :-)

# février 25, 2007 10:26

neodante a dit :

Merci bien coq, exactement l'info dont j'avais beson ;-)

# février 25, 2007 14:05

coq a dit :

Content que ça serve :-)

# mars 2, 2007 21:35

Billou_13 a dit :

Merci Coq pour cet article (malgré que je le regardes à retardement ^^).

Cependant une question:

- Tu dis que "XmlSerializer(Type)" pose le problème de non-cache.

- Et dans le lien: http://blogs.msdn.com/tess/archive/2006/02/15/532804.aspx , partie "What is the solution?", il est spécifié: "The default constructors XmlSerializer(type) and XmlSerializer(type, defaultNameSpace) caches the dynamic assembly so if you use those constructors only one copy of the dynamic assembly needs to be created."

Quelle est la vérité ?

"XmlSerializer(Type)" passe en cache ou pas après première instanciation ?

Merci par avance,

Billou_13

# octobre 13, 2008 12:15
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 34 minutes

- PDC 2008 - J-14 ! par Nix's Blog le il y a 2 heures et 18 minutes

- [Silverlight] La version finale de Silverlight 2 sera disponible en téléchargement demain ! par Thomas Lebrun le il y a 4 heures et 12 minutes

- SharePoint 2007 : Professional Developers Conference 2008 par Philippe Sentenac [MVP SharePoint] le il y a 10 heures et 5 minutes

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39