0

私のC#アプリでは、実行すると、ハンドル列の数が着実に増加していることがWindowsタスクマネージャーではっきりとわかります。メモリは問題なく増加しません。ハンドルだけが非常に高いレベルに到達します。

このリークをデバッグして検出し、ハンドル リークを解決するにはどうすればよいですか。

ありがとう!

4

1 に答える 1

0

これがあなたがデバッグしようとしているものであるとは思えません。これは、コード インスペクションで見つけられるものです。考えられる原因:

  1. GDI オブジェクトの破棄に失敗しました。WinForms を使用していますか? usingすべてのブラシとペンにステートメントがありますか?

  2. スレッド数はハンドル数とともに増えていますか? 完了しないスレッドを開始していますか?

  3. LogonUser を使用していますか? クローズハンドル? ユーザー ハンドルの破棄には細心の注意を払う必要があります。ログオン ハンドルを WindowsIdentiy に渡す場合は、ハンドルを WindowsIdentity に渡した直後に破棄する必要があります (ハンドルが作成されたのと同じスレッドで)。

  4. SqlConnection を使用していますか? プールは開いたハンドルを維持します。たぶん、何かが正しくありません。

何年も前に、LogonUser ハンドルの破棄が遅れるという問題がありました。実際、ユーザーは切断され、ハンドルは自動的に閉じられました。その後、ハンドルだと思ったものに対して CloseHandle を呼び出します。ただし、.NET のハンドル スロットは再利用されます。それらはほとんど常に有効ですが、特定のスロットにあるオブジェクトの種類を知ることはできません。私は実際に SqlConnection プール オブジェクトを誤って閉じていました。

于 2015-01-27T16:09:00.833 に答える