J'ai hérité d'un projet dans lequel le modèle de données de l'application est un document XML. Les développeurs avant moi avaient créé un modèle d'objet basé sur le schéma de ce xml, puis codé par rapport au modèle d'objet.La sérialisation XML est lente
Après plusieurs années de maintenance, cette application a progressivement commencé à montrer son âge. Le chef d'équipe a dit que la principale raison derrière cela est due à la «lenteur» de la sérialisation xml. Je suis tenté d'appeler BS sur ce sujet, mais la plupart des fichiers XML que nous traitons ont une taille de plus de 2MB, et en gardant à l'esprit les bases de ce qui se passe dans les coulisses avec des objets marqués [Serializable]
, 2MB il pourrait donc y avoir une part de vérité dans la théorie de la lenteur. D'après votre expérience, la sérialisation est-elle vraiment si "lente"/mauvaise que d'opter pour un modèle XML -> XPath au lieu d'un modèle XML -> POCO?
BTW il s'agit d'un projet .NET 2.0, et nos clients pourraient passer à .NET 3.5 vers la fin de l'année prochaine.
+1 bonne réponse. En passant, je me souviens d'avoir vu des benchmarks sur DataContractSerializer qui l'ont montré en moyenne 10% plus rapide que XmlSerializer. – womp
-1 Parce que la sérialisation XML * utilise très certainement * Reflection; il n'y a aucun moyen d'obtenir les détails du type * à moins que * il utilise la réflexion. Maintenant, ces détails ne doivent pas être utilisés * de façon répétée * mais ils doivent être obtenus en premier lieu. De plus, le 'DataContractSerializer' ne fait pas partie de WCF; WCF l'exploite fortement, mais il se trouve en dehors de WCF (dans son propre espace de noms et son propre assemblage). – casperOne
@casperOne Le XML Serializer utilise la réflexion comme vous l'avez dit la première fois en supposant que vous appelez les bons constructeurs, il mettra en cache l'assemblage résultant. Je crois que vous pouvez également générer ceci à la compilation – JoshBerke