6

Ich schreibe eine Windows-Dienstanwendung, die XML-Dokumente während der Ausführung wiederholt serialisieren und deserialisieren muss. Da ich generische Typen serialisieren und deserialisieren muss, die während der Kompilierungszeit nicht bekannt sind (ich weiß nicht a priori, wie viele Typen ich serialisieren/deserialisieren muss), würde ich gerne wissen, ob es eine gute Idee ist, einen Cache zu behalten von DataContractSerializer-Objekten, die ich zum Serialisieren und Deserialisieren der Objekte instanziiere.Ist es eine gute Idee, DataContractSerializer-Instanzen zwischenzuspeichern?

Ich stelle diese Frage, weil ich weiß, dass es eine gute Idee ist, die XmlSerializer-Klasseninstanzen zwischenzuspeichern, da sie eine dynamische Assembly im Speicher unter der Haube erstellen und die im Speicher dynamisch erstellten Assemblies keine Garbage Collection sind.

Ich habe gelesen, dass der DataContractSerializer auf leichte Code-Generierung angewiesen ist, aber ich bin nicht mit den Details davon üblich. Deshalb stelle ich diese Frage, ich muss verstehen, wenn ich DataContractSerializer-Instanzen nach Bedarf instanziiere, würde es mich zu einem Speicherverlust führen, wie der XmlSerializer würde?

Ich habe gewählt, den DataContractSerializer anstelle des XmlSerializer zu verwenden, um interne Eigenschaften serialisieren zu können.

+0

(auf Kommentar geantwortet) –

Antwort

4

... es eine gute Idee ist es, die XmlSerializer-Klasse Instanzen gecached werden, da sie eine dynamische Assembly im Speicher unter der Haube ... schaffen

Mit XmlSerializer, es hängt wirklich ab, ob Sie verwenden Der einfache Konstruktor (new XmlSerializer(typeToHandle)), oder die komplexeren Konstruktoren, mit denen Sie alle Attribute zur Laufzeit angeben können. Wenn Sie nur den einfachen Konstruktor verwenden, wird die Hintergrund-Assembly erneut verwendet, sodass es keine Wiederholungsstrafe gibt.

Ich würde erwarten (aber nicht getestet haben) DataContractSerializer ähnlich arbeiten; aber es ist sicherlich nicht schaden, einfach das Caching, vielleicht in einem statischen Nur-Lese-Feld

Beachten Sie, dass DataContractSerializer schränkt das XML-Layout, das Sie zur Verfügung haben ... solange Sie mit diesen ;-p OK sind

+0

Wissen Sie, welche Einschränkungen für das XML-Layout bei Verwendung des DataContractSerializers gelten? Ich möchte nur wissen, ob ich damit einverstanden bin: P –

+1

Es gibt kein Äquivalent von [XmlAttribute], das am offensichtlichsten ist. Wenn es Ihr Hauptziel ist, Daten zu serialisieren, ist es in Ordnung (wie auch verschiedene andere). Wenn Ihr Hauptziel darin besteht, XML in ein bestimmtes Layout zu schreiben, kann das problematisch sein. –