1

ネイティブ ライブラリを呼び出すマネージド DLL があります。通常、このネイティブ ライブラリは IntPtrs を返します。これらをネイティブ ライブラリの他のメソッドに渡して処理を実行したり、IntPtr に関連付けられたインスタンスを解放するようライブラリに指示したりできます。ただし、この方法で解放する必要があるのは一部のインスタンスのみであり、他のインスタンスはライブラリによって管理されます。問題は、どのインスタンスを解放する必要があり、どのインスタンスを解放してはならないかについて、ドキュメントが常に明確であるとは限らないことです。

私が知りたいのは、私のコードが解放する必要のあるポインターへの参照を保持しているかどうかを確認できる方法があるかどうかです。そのため、メモリ リークが発生していますか?

4

3 に答える 3

1

SafeHandlesを使用して、ネイティブコードから返されたハンドルをラップすることを検討することをお勧めします。これは、IntPtrよりもいくつかの追加の価値を提供します。

于 2008-10-29T02:05:41.537 に答える
1

私はWinDbgを使用しています(こちらから入手できます)。コマンドライン駆動ですが、スタック情報、オブジェクトの数、取得されたサイズを含む多くの優れたレポートを提供します (これは、破棄されていないアイテムを指摘するのに役立ちます)。

また、メモリ リークとハンドル リークに固有のレポートを作成するデバッグ診断ツールもあります。ここにあります

于 2008-10-28T21:44:29.753 に答える
1

最も簡単な方法は、おそらくメモリ プロファイラを使用することです。簡単なグーグルでMemProfilerへのリンクが見つかりました。これを 1 回 (試用として) 使用したことがありますが、DirectoryEntries を適切に破棄していない場所を見つけることができました。RedGateのこれを含め、他にもあると思います。

于 2008-10-28T19:33:20.190 に答える