C# で記述された WinForms .NET アプリケーションがあるとします。このアプリケーションは、マネージ ヒープとアンマネージ ヒープの両方から大量のメモリを割り当てます。Red Gate ANTS Profiler (私は使用していません) やJetBrains dotTraceなどのツールを使用して、管理対象オブジェクトの割り当ての詳細 (誰が、いつ、どれだけなど) を (比較的) 簡単に把握できます。
問題が発生するのは、マネージ オブジェクトが重要なネイティブ リソース (イメージや大きな COM オブジェクトなど) を使用する場合、または大量のメモリを必要とするアンマネージ サード パーティ ライブラリを呼び出す場合です。これまでのところ、1) メモリを大量に消費しているのはマネージ コードかアンマネージ コードか、および 2) アンマネージ ヒープを大量に使用しているのは誰かを突き止めるために、調査作業を行う必要があります。
現時点で私が持っている唯一の手法は、マネージド ヒープとアンマネージド ヒープのサイズ、割り当てなどを比較するパフォーマンス カウンターを perfmon に設定することです。ネイティブ リソースを消費するアンマネージ ライブラリや .NET オブジェクト。
大量のマネージコードとアンマネージ コードを扱う開発者を支援するツールと手法の最適な組み合わせは何ですか?
更新:より明確にするために、マネージ コードから呼び出されるアンマネージ コードでメモリの問題 (高使用率、リーク) を検出する方法を知りたいです。dotTrace のような製品は、管理対象オブジェクトのみを追跡すると思います。