Ich habe ein Projekt geerbt, wo das Datenmodell der Anwendung ein XML-Dokument ist. Die Entwickler vor mir hatten basierend auf diesem XML-Schema ein Objektmodell erstellt und dann gegen das Objektmodell codiert.XML-Serialisierung ist langsam
Nach mehreren Jahren der Wartung hat diese Anwendung allmählich begonnen, ihr Alter zu zeigen. Der Teamleiter sagte, dass der Hauptgrund dafür in der "Langsamkeit" der XML-Serialisierung liegt. Ich bin versucht, BS dabei zu nennen, aber viele der XML-Dateien, mit denen wir arbeiten, sind über 2MB groß, und unter Berücksichtigung der Grundlagen dessen, was hinter den Kulissen mit [Serializable]
gekennzeichneten Objekten passiert, ist 2MB eine Menge nachzudenken also könnte die Langsamkeitstheorie etwas Wahrheit enthalten.
Ist Ihre Serialisierung wirklich so "langsam"/schlecht, dass Sie sich für ein XML -> XPath-Modell anstelle eines XML -> POCO-Modells entscheiden?
BTW ist dies ein .NET 2.0-Projekt, und unsere Kunden möglicherweise Upgrade auf .NET 3.5 irgendwann Ende nächsten Jahres.
+1 große Antwort. Nebenbei erinnere ich mich an einige Benchmarks auf DataContractSerializer, die im Durchschnitt etwa 10% schneller waren als der XmlSerializer. – womp
-1 Weil XML-Serialisierung * definitiv * Reflection verwendet; Es gibt keine Möglichkeit, Typdetails * zu erhalten, es sei denn * es wurde Reflection verwendet. Nun müssen diese Details * nicht wiederholt verwendet werden, aber sie müssen erst erhalten werden. Außerdem ist der 'DataContractSerializer' nicht Teil von WCF; WCF nutzt es stark, aber es befindet sich außerhalb von WCF (in seinem eigenen Namespace und seiner eigenen Assembly). – casperOne
@casperOne Der XML-Serializer verwendet Reflektion, wie Sie beim ersten Mal gesagt haben, vorausgesetzt, Sie rufen die richtigen Konstruktoren auf, die die resultierende Assembly zwischenspeichern. Ich glaube, du kannst das auch zur Kompilierzeit generieren – JoshBerke