2009-07-17 33 views
6

静的なソースまたは実行中のプログラムを解析してメモリリークを検出するためのツールがありますか?.NETアプリケーションでのメモリリークのテスト

私はいくつかのWindowsサービスを構築しましたが、それらを数週間連続して実行するとメモリを消費しないようにしたいと考えています。

+1

ガベージコレクタは最終的にそれらを拾いませんか? – James

+1

あなたがそれらを参照している場合はありません。例:イベントでオブジェクトを作成してからイベントハンドラをアタッチする場合に起こります。イベントハンドラを削除しないと、オブジェクトはクリーンアップされません。 –

+0

彼が探す必要のある漏れの種類は、サイズが大きくなり続けるオブジェクトで、周囲にあるオブジェクトへの参照を保持します。また、彼は彼が検出したいアンマネージド・リソースに関連するコードにバグを持つ可能性があり、.NETランタイムには少なくとも1つのバグがありました(CopyFromScreenメソッドは毎回1つのハンドルをリークします)そのようなことをチェックしたい。 –

答えて

2

自由であることの要件を満たしているが、私は示唆価値があると思いますレッドゲートずつがありますされません - ANTS Memory Profiler

私は裁判上の(一部、私たちはきたいくつかの前に、彼らの多くのツールを使用してきましたが彼らは非常に良いことがわかりました。

1

あなたのサービスの実行をしてみましょうし、サービスのメモリ使用状況に関する情報を収集するために、パフォーマンスモニタを使用するためのフリー(オープンソース)のパフォーマンスとメモリプロファイラです。また、アンマネージリソースを使用する場合は、コードがIDisposableを使用してこれらのリソースを適切に処分するようにしてください。管理されていない環境では、単にポインタをリリースすることを忘れることによって簡単にリークが発生する可能性がありますが、管理された環境では不可能です。ただし、新しいオブジェクトを割り当て続けて参照を保持してガベージコレクションできないようにすると、サービスにはより多くのメモリが必要になります。

1

MicrosoftのCLR Profilerを使用して成功しました。完全な利点を得るには、そのdocumentationを必ず読んでください。

0

Windowsタスクマネージャを使用して、少なくともサービスのメモリリークの存在を検出できることを忘れないでください。 ビューに>列の選択を行くとUSERがGDIはへ(GDIおそらく有用ではないオブジェクトをオブジェクトチェックし、それが[プロセス]タブに切り替えるには、オブジェクトを追跡するために、タスクマネージャを使用する

別の方法あなたはサービスを実行しているので、あなたは役に立つと思うかもしれません)

関連する問題