3

C#アプリケーションでプロファイラー(CLR Profiler 4.0)を実行しましたが、アプリケーションが終了した後、次の統計情報が残りました。

作成されたハンドル:34,126破棄されたハンドル:32,844存続したハンドル:1,282

プログラムが終了すると、ハンドルの存続はほぼゼロになるはずだという印象を受けています。私はこれについて間違っていますか?アプリケーションがメモリをリークしていないことを示す他の指標は何ですか?

4

1 に答える 1

2

これらは、アプリを閉じる直前に残っているハンドルです。これは、アプリがメモリ リークを起こしているという意味ではありません。すべてのハンドル、アプリケーション ドメイン、およびプロセス内に存在するその他の "マネージド" リソースがクリーンアップされます。ネイティブ dll を呼び出したり、他の「安全でない」コード ブロック (アンマネージ リソース) を使用した場合は、コード内のそれらのリソースを解放する必要があります (デストラクタまたは IDisposible インターフェイスを使用して解放できます)。

「 .NET メモリ管理の内部」の 44 ページの「世代別ガベージ コレクション」という見出しから読み始めることをお勧めします。それはそれらの結果をいくらかクリアするはずです。

于 2012-09-04T22:38:20.587 に答える