2

C# で記述された WinForms .NET アプリケーションがあるとします。このアプリケーションは、マネージ ヒープとアンマネージ ヒープの両方から大量のメモリを割り当てます。Red Gate ANTS Profiler (私は使用していません) やJetBrains dotTraceなどのツールを使用して、管理対象オブジェクトの割り当ての詳細 (誰が、いつ、どれだけなど) を (比較的) 簡単に把握できます。

問題が発生するのは、マネージ オブジェクトが重要なネイティブ リソース (イメージや大きな COM オブジェクトなど) を使用する場合、または大量のメモリを必要とするアンマネージ サード パーティ ライブラリを呼び出す場合です。これまでのところ、1) メモリを大量に消費しているのはマネージ コードかアンマネージ コードか、および 2) アンマネージ ヒープを大量に使用しているのは誰かを突き止めるために、調査作業を行う必要があります。

現時点で私が持っている唯一の手法は、マネージド ヒープとアンマネージド ヒープのサイズ、割り当てなどを比較するパフォーマンス カウンターを perfmon に設定することです。ネイティブ リソースを消費するアンマネージ ライブラリや .NET オブジェクト。

大量のマネージコードアンマネージ コードを扱う開発者を支援するツールと手法の最適な組み合わせは何ですか?

更新:より明確にするために、マネージ コードから呼び出されるアンマネージ コードでメモリの問題 (高使用率、リーク) を検出する方法を知りたいです。dotTrace のような製品は、管理対象オブジェクトのみを追跡すると思います。

4

3 に答える 3

1

.net アプリケーションと互換性のある多くのメモリ プロファイリング ツールのいずれかを使用できます。いくつかは次のとおりです。

1) .NET プロファイラ API

2) dotTRACE プロファイラー

3)メモリープロファイラー

于 2009-01-28T15:39:53.327 に答える
0

Memory Validatorは、.Net アプリケーション、混合モードの .Net アプリケーション、またはネイティブ アプリケーションでアンマネージ (ネイティブ) に割り当てられたメモリについてすべて教えてくれます。

于 2010-03-16T19:53:54.467 に答える
0

Perfmon で使用できる多くの .NET メモリ カウンターを見るだけで概要を把握できます。

無料のツールを使用する場合、Windows 用デバッグ ツール(具体的には WinDbg + SoS) を使用すると、オブジェクトが期待どおりに収集されない理由がわかります。

于 2009-01-28T15:45:06.797 に答える