6

実行中に XML ドキュメントを繰り返しシリアル化および逆シリアル化する必要がある Windows サービス アプリケーションを作成しています。コンパイル時に不明なジェネリック型をシリアル化および逆シリアル化する必要があるため (シリアル化/逆シリアル化する必要がある型の数が先験的にわかりません)、キャッシュを保持するのが良い考えかどうかを知りたいですオブジェクトをシリアル化および逆シリアル化するためにインスタンス化します。

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

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

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

4

1 に答える 1

4

... XmlSerializer クラスのインスタンスをキャッシュすることをお勧めします。これは、内部でメモリ内に動的アセンブリを作成するためです...

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

同様に動作することを期待します(ただし、テストしていません) 。DataContractSerializerしかし、おそらく静的な読み取り専用フィールドで、単純にキャッシュしても害はありません

あなたが利用できるxmlレイアウトを制限することに注意しDataContractSerializerてください...あなたがそれでOKである限り;-p

于 2009-07-18T11:37:52.917 に答える