2

アプリケーションでメモリ リークが発生しています。メモリ プロファイラはまだ実行していません。CLR 2 (.NET 2、.NET 3.5) のリークに関する多くのブログ投稿やその他の記事を見つけました。だから、これがまだCLR 4(.NET 4)の問題であるかどうかを誰かが知っているかどうか疑問に思っていました..

(SO でこれを見つけました: .Net 3.5 で XMLSerialization を使用した既知のメモリ リークはまだありますか? )

4

2 に答える 2

0

SOで見つけた最良の答えはこれでした: https://stackoverflow.com/a/36123026/2941313

XmlSerializer に関する msdn ページへのリンクをたどると、次のコメントが引き続き表示されます。

パフォーマンスを向上させるために、XML シリアル化インフラストラクチャはアセンブリを動的に生成して、指定された型をシリアル化および逆シリアル化します。インフラストラクチャは、これらのアセンブリを見つけて再利用します。この動作は、次のコンストラクターを使用する場合にのみ発生します。

  • XmlSerializer.XmlSerializer(タイプ)
  • XmlSerializer.XmlSerializer(型, 文字列)

他のコンストラクターを使用すると、同じアセンブリの複数のバージョンが生成され、アンロードされないため、メモリ リークが発生し、パフォーマンスが低下します。最も簡単な解決策は、前述の 2 つのコンストラクターのいずれかを使用することです。それ以外の場合は、次の例に示すように、アセンブリを Hashtable にキャッシュする必要があります。

そして、適切なハッシュの例があります...だから、答えは yesだと思いますが、これらのメモリの問題を回避できます。

于 2016-06-20T08:10:45.087 に答える