6

私は、XML文書を実行中に繰り返して直列化および逆直列化する必要があるWindowsサービスアプリケーションを作成しています。私はシリアル化し、コンパイル時に知られていないジェネリック型を逆シリアル化する必要がある(私は先験的にどのような多くの種類のシリアル化/デシリアライズする必要があるか分からない)私はそれが良い考えであるかどうかを知っていると思いますDataContractSerializerオブジェクトの直列化と逆シリアル化のためにインスタンス化します。DataContractSerializerインスタンスをキャッシュすることをお勧めしますか?

XmlSerializerクラスのインスタンスをメモリ内に作成し、メモリ内に動的に作成されたアセンブリがガベージコレクションされないため、このインスタンスをキャッシュすることをお勧めします。

私は、DataContractSerializerは軽量コード生成に依存していると読んでいますが、私はその詳細についていつもよくありません。これが私がこの質問をしている理由です。必要に応じてDataContractSerializerインスタンスをインスタンス化すると、XmlSerializerのようにメモリリークが発生しますか?

内部プロパティをシリアル化できるように、XmlSerializerの代わりにDataContractSerializerを使用することを選択しました。

+0

(コメントに返信しました) –

答えて

4

...それは...彼らはボンネットの下にメモリ内に動的アセンブリを作成するため、XmlSerializerクラスのインスタンスをキャッシュするXmlSerializer

良いアイデアですが、それは実際にあなたが使用しているかどうかによって異なります単純なコンストラクタ(new XmlSerializer(typeToHandle))、または実行時にすべての属性などを指定できるより複雑なコンストラクタです。シンプルなコンストラクタのみを使用すると、バックグラウンドアセンブリが再利用されるため、繰り返しのペナルティは発生しません。

私はを期待しています(ただしテストしていません)DataContractSerializerは同様に動作します。しかし、単純にそれをキャッシュするには害はDataContractSerializerはあなたに利用可能なXMLのレイアウトを制限することを

注限り、あなたはその;-p

でOKだと...おそらく静的読み取り専用フィールドには、確かに存在しません
+0

DataContractSerializerを使用しているとき、xmlレイアウトの制約事項を知っていますか?私はちょうど私がそれで大丈夫であることを確認することを知りたいです:P –

+1

[XmlAttribute]に相当するものはありませんが、最も明白です。あなたの主な目的がデータをシリアライズすることであるならば、(それは他のものと同様に)うまくいきます。あなたの主な目的がxmlを特定のレイアウトで書くことであるならば、面倒なことがあります。 –

関連する問題