静的なソースまたは実行中のプログラムを解析してメモリリークを検出するためのツールがありますか?.NETアプリケーションでのメモリリークのテスト
私はいくつかのWindowsサービスを構築しましたが、それらを数週間連続して実行するとメモリを消費しないようにしたいと考えています。
静的なソースまたは実行中のプログラムを解析してメモリリークを検出するためのツールがありますか?.NETアプリケーションでのメモリリークのテスト
私はいくつかのWindowsサービスを構築しましたが、それらを数週間連続して実行するとメモリを消費しないようにしたいと考えています。
自由であることの要件を満たしているが、私は示唆価値があると思いますレッドゲートずつがありますされません - ANTS Memory Profiler
私は裁判上の(一部、私たちはきたいくつかの前に、彼らの多くのツールを使用してきましたが彼らは非常に良いことがわかりました。
Redgate Ants Performance Profilerが参考になる場合があります。それは無料ではありませんが、サービスを稼働させるには十分な14日間の試験があります。
Profile Sharpは、.NET
あなたのサービスの実行をしてみましょうし、サービスのメモリ使用状況に関する情報を収集するために、パフォーマンスモニタを使用するためのフリー(オープンソース)のパフォーマンスとメモリプロファイラです。また、アンマネージリソースを使用する場合は、コードがIDisposable
を使用してこれらのリソースを適切に処分するようにしてください。管理されていない環境では、単にポインタをリリースすることを忘れることによって簡単にリークが発生する可能性がありますが、管理された環境では不可能です。ただし、新しいオブジェクトを割り当て続けて参照を保持してガベージコレクションできないようにすると、サービスにはより多くのメモリが必要になります。
MicrosoftのCLR Profilerを使用して成功しました。完全な利点を得るには、そのdocumentationを必ず読んでください。
Windowsタスクマネージャを使用して、少なくともサービスのメモリリークの存在を検出できることを忘れないでください。 ビューに>列の選択を行くとUSERがとGDIはへ(GDIおそらく有用ではないオブジェクトをオブジェクトチェックし、それが[プロセス]タブに切り替えるには、オブジェクトを追跡するために、タスクマネージャを使用する
別の方法あなたはサービスを実行しているので、あなたは役に立つと思うかもしれません)
私はhttp://memprofiler.com/をお勧めできますが、それは無料ではありません。
ガベージコレクタは最終的にそれらを拾いませんか? – James
あなたがそれらを参照している場合はありません。例:イベントでオブジェクトを作成してからイベントハンドラをアタッチする場合に起こります。イベントハンドラを削除しないと、オブジェクトはクリーンアップされません。 –
彼が探す必要のある漏れの種類は、サイズが大きくなり続けるオブジェクトで、周囲にあるオブジェクトへの参照を保持します。また、彼は彼が検出したいアンマネージド・リソースに関連するコードにバグを持つ可能性があり、.NETランタイムには少なくとも1つのバグがありました(CopyFromScreenメソッドは毎回1つのハンドルをリークします)そのようなことをチェックしたい。 –