2011-10-21 7 views
3

私のアプリケーションの1つでは、ハンドルの数が増えています。この数は、アプリケーションを使用せずに約1秒ごとにインクリメントされるため、バックグラウンド処理コードの一部でハンドルリークが発生する必要があります。ハンドルリークをトレースする方法は?

このようなリークをどのようにトレースできますか?これを助けるツールはありますか?ハンドルリークをトレースするときに探すパターンは何ですか?ハンドルリークを引き起こす最も一般的な間違いは何ですか?

質問がたくさんありますが、1つの質問にそれらを入れるのに十分関連していることを願っています。事前にお問い合わせいただきありがとうございます!

答えて

4

Process Explorerを使用することをおすすめします。管理者として実行して、すべての関連データが表示されることを確認します。そこでは、あなたのプロセスにどのような種類のハンドルがあり、どれが過度に作成されていて、free'dではないのかを見ることができます。これはあなたの検索範囲を絞り込むのに役立つはずです(私の場合、私はソケットがwinsocksの動作に関するいくつかの誤った仮定のために全面的に漏れていました)。おそらく、関連するコードを分離して、ここに投稿して、間違っているかどうかを確認することができます。がんばろう!

+0

+1ありがとうございます!私はProcessExplorerを知っていますが、この目的には使用していません。漏れているハンドルはセクションハンドルです。私のフォローアップの質問を参照してください:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

5

一部のプロファイラー(つまり、AQTime)は、Windowsリソースアプリケーションをプロファイルできます。 XEを使用している場合は、基本バージョンのAQTimeを使用できます。

実行パスが適切に閉じないと、ハンドルリークがよく発生しますが、Windowsではハンドルは非常に多くの異なる状況で使用される非常に一般的なアイテムで、どの種類のハンドルがアプリケーションから漏れていますか?

+0

+1ありがとう!私はAQTimeを試してみる必要があります。私のアプリがセクションハンドルを漏らしていることがわかります。フォローアップの質問を見てください:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

+1

AQTimeのようなプロファイラは、漏れたハンドルがどこにあったかを教えてくれます作成した。プロセスエクスプローラを使用すると、コールスタックを表示できるため、AQTimeのように情報は記録されません.AQTimeはそのために重くなりますが、これはもう少し困難です。実際にこれらの呼び出しの多くを記録するProcess Monitorを試すこともできます。とにかく、AQTimeのようなプロファイラがあれば、このようなことを達成するのに最適なツールです。 PE/PMは、AQTimeなどをインストールできるシステムを検査する必要があるときに非常に貴重なツールです。 –

関連する問題