8

コード内の次の場所に到達するたびに OutOfMemoryExceptions をスローする Web サイトがあります。

XmlSerializer xs = new XmlSerializer(t, xoverrides);

これがWebサーバー上にある場合にのみ発生する方法を見て、なぜこれが発生するのかについての情報がたくさんありません. シリアライズしているオブジェクトがそれほど深刻なものではないことはわかっています。それぞれが 1 MB 未満であることは間違いありません。

これは前に食べたことがありますか?問題の診断を手伝ってくれませんか?どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

12

OutOfMemoryException は、シリアル化されているオブジェクトが原因ではなく、XmlSerializer オブジェクトの構築の結果です。XmlSerializer が作成されると、アセンブリが動的に生成され、AppDomain に読み込まれます。これらのアセンブリは、AppDomain がアンロードされるまでガベージ コレクションできません。使用されている XmlSerializer コンストラクターに応じて、構築されたすべての XmlSerializer が新しいアセンブリを動的に生成します。時間の経過とともに、これらのアセンブリは利用可能なすべてのメモリを消費します。

いくつかの解決策があります。

  1. 作成した XmlSerializer をキャッシュします。
  2. キャッシュを実装する XmlSerializer コンストラクター オーバーロードのいずれかを使用します。キャッシュを実装していない XmlSerializer(Type, XmlAttributeOverrides) を使用しているようです。XmlSerializer(Type) および XmlSerializer(Type, string) はキャッシュを実装します。

Microsoft KB : ASP.NET で複数の XmlSerializer オブジェクトを作成するとメモリ使用量が高くなる

于 2010-05-18T23:03:25.253 に答える
0

しばらく前の同様の問題を思い出すと、XmlSerializer はデータの処理よりも大量のメモリを必要とします。なぜそうなのかはわかりませんが。

于 2010-05-10T19:23:11.530 に答える