2009-02-04 11 views
3

Aloha,Quel est le moyen le plus efficace pour Deserialze un fichier XML

Je dispose d'un fichier XML de 8MB que je souhaite désérialiser. Je suis en utilisant ce code:

public static T Deserialize<T>(string xml) 
{ 
    TextReader reader = new StringReader(xml); 
    Type type = typeof(T); 
    XmlSerializer serializer = new XmlSerializer(type); 
    T obj = (T)serializer.Deserialize(reader); 
    return obj; 
} 

Ce code fonctionne dans environ une minute, ce qui me semble plutôt lent à. J'ai essayé d'utiliser sgen.exe pour précompiler la DLL de sérialisation, mais cela n'a pas changé les performances.

Quelles autres options ai-je pour améliorer les performances?

[modifier] J'ai besoin de l'objet qui est créé par le désérialisation pour effectuer des transformations (de base) sur. Le XML est reçu d'un service web externe.

+0

Quel genre de transformations voulez-vous appliquer? Avez-vous envisagé d'utiliser XSLT (en combinaison avec XmlReader ou XPathDocument)? –

+0

Sur quelle ligne de code passe-t-elle le plus de temps? Sur la création du sérilisateur ou sur la désérialisation elle-même? –

Répondre

3

XmlSerializer utilise la réflexion et est donc pas le meilleur choix si la performance est un problème.

Vous pouvez créer un DOM de votre document XML en utilisant les classes XmlDocument ou XDocument et travailler avec, ou, encore plus rapidement, utiliser un XmlReader. Le XmlReader vous demande toutefois d'écrire vous-même un mappage d'objet - si nécessaire.

Quelle approche est la meilleure dépend stronly de ce que vous voulez faire avec les données XML. Avez-vous simplement besoin d'extraire certaines valeurs ou devez-vous travailler et éditer tout le modèle d'objet de document?

2

Oui, il utilise la réflexion, mais la performance est une zone grise. Quand on parle d'un fichier 8mb ... oui ça va être beaucoup plus lent. Mais s'il s'agit d'un petit fichier, ce ne sera pas le cas.

Je ne dis pas lire le flacon de fichier XmlReader ou XPath serait plus facile ou vraiment plus vite. Qu'est-ce qui est plus facile que de dire quelque chose pour transformer votre xml en objet ou en objet en XML ...? pas tant.

Maintenant, si vous avez besoin d'un contrôle précis de grain alors peut-être vous avez besoin de le faire à la main.

Personnellement, le choix est comme ça. Je suis prêt à abandonner un peu de vitesse pour sauver une tonne de code méchant laid.

Comme tout le reste dans le développement de logiciels, il y a des compromis.

1

Vous pouvez mettre en œuvre IXmlSerializable dans votre « T » écrire une logique de classe personnalisée pour traiter le XML.

+0

Cela semble intéressant, pourriez-vous me fournir des pointeurs vers des options de sérialisation haute performance? – edosoft