2

アプリケーションの 1 つでメモリ リークを見つけようとしていますが、なかなかわかりません。

Ants メモリ プロファイラーでプログラムを分析したところ、Ants メモリ プロファイラーが適していないアンマネージ コードにリークがあることがわかりました: http://www.red-gate.com/supportcenter/content/ANTS_Memory_Profiler/help/ 7.4/amp_unmanaged_use「グラフィックス バッファ」と「アンマネージ コードでのオブジェクトの破棄に関する問題」セクションを確認しましたが、結果は得られませんでした。

次に、Windows デバッグ診断ツールを使用して、メモリ不足の分析を行いました。メモリ使用量の大部分は、ネイティブ ヒープ: ヒープ 6 0x01ee0000 (既定のプロセス ヒープではありません) にあります。仮想割り当てサマリー メモリが少なく、リーク分析の未解決の割り当てサマリー メモリも少ない: どのモジュールもメモリ使用量が高くありません。

現在メモリ リークが発生している場所を特定するにはどうすればよいですか?

4

2 に答える 2

1

メモリ リーク診断は Microsoft CRT の組み込み機能であり、_CrtDumpMemoryLeaks() 関数はレポートを提供します。これを使用するには、デバッグ アロケータを有効にしてこの関数を機能させることができるように、ネイティブ コードで単体テストを記述する必要があります。そのため、ヘッダー ファイルでデバッグ アロケーターを有効にして<crtdbg.h>、単体テストをビルドできるように、このアンマネージ コードのソース コードを作成する必要があります。エッセンシャルガイドはこちら.

通常の障害は、ネイティブ ソース コードにアクセスできないことです。その場合、この問題を解決するには、このコードのベンダーまたは作成者と協力する必要があります。問題を示す小さな再現プロジェクトを彼に提供して、ボールを転がしてください。

于 2012-06-26T12:46:30.143 に答える
0

実際のメモリ プロファイラー ツールが必要な場合は、http://memprofiler.com/support.aspxを参照してください。私がこれまでに使用したメモリ リーク用のツールの中で、群を抜いて最高のツールの 1 つです。.NET はあらゆる場所でアンマネージ コードと相互運用します。アンマネージ コードでリークが発生したからといって、コードのどこかに参照保持の問題がないというわけではありません。メモリ リークの問題があると思われる理由とその解決策について詳細を提供していただければ、より多くの解決策を提供できる可能性があります。

于 2012-06-26T18:09:55.753 に答える