VS 2010、.Net 4、WPF、.Net Memory Profiler バージョン 4.6.40.0 Pro を使用しています。それらはすべてWin7 64ビットで実行されています。私は .Net Memory Profiler を使用してメモリ リークを追跡してきましたが、解決したように見えても理解できないものを見つけました。3 つの ContentPresenter オブジェクトを含むコントロールがあります。Cleanup メソッドで ContentPresenter オブジェクトの Content プロパティを null に設定すると、コントロールはまったくリークしません。Content プロパティを無効にしないと、大量のリークが発生します (各テストで約 3.5 MB)。
Google 検索で見た結果は、この問題に直接対処しているようには見えませんでした。ContentPresenter のドキュメントも役に立ちませんでした。コンテンツを無効にすることでリークが修正された理由を理解している人はいますか? 同じことを達成するためのより良い方法はありますか?
空域の問題を処理するために、ContentPresenter の 1 つが WindowsFormsHost と BitmapSource の間で動的に切り替えられることに注意してください。
更新: クリーンアップの関連部分は次のとおりです。
まず、ContentPresenter の
AddressGridPlaceholder.Content = null;
AddressFormPlaceholder.Content = null;
MapControlPlaceholder.Content = null;
次に、WindowsFormsHost をクリーンアップします。
if (_hoster != null)
{
_hoster.Child = null; // Remove the map control reference first
_hoster.Dispose(); // Then Dispose
}