メモリリークを検出するための最良のツールは何ですか。
無料と無料ではありません。
ありがとう
Delphi 7での作業では、EurekaLogを使用します。これは、アクセス違反の場合でも例外(callstack!環境変数など)に関する非常に詳細な情報を提供する例外ハンドラコンポーネントです。しかし、もう1つの優れた機能は、メモリリーク時にエラーが発生するように指示できることです。これにより、メモリ/オブジェクトが最初に割り当てられた正確なコード行が表示されます。市販品ですが、それでもお勧めです。
FastMMは、無料の(ソースが利用可能な)メモリリーク検出器であり、最新のDelphiバージョンにすでに統合されています。私は他に何も必要としませんでした。
ところで、後で見つけるのではなく、コーディング時にメモリリークの可能性を制限する方がはるかに優れています。いくつかのヒント:
作成したオブジェクトを解放するには、コードで常にtryとfinallyを使用してください。このコードをすぐに記述してから、オブジェクトを使用するコードを記述してください。コードテンプレートのようなIDE機能を利用することはさらに良いことです。
どうしても必要な場合にのみ、動的に割り当てられたオブジェクトを返す関数を使用してください。一般に、オブジェクトを作成して返すよりも、オブジェクトをパラメータとして渡す方が適切です。たとえばこれ
procedure getChoices(var AChoices: TStrings);
よりもはるかに良いでしょう
function getChoices: TStrings;
作成されたTStringsオブジェクトを誤ってリークする可能性がないためです。
Delphiに含まれているバージョンよりも完全なFastMM4バージョンをお勧めします。フルバージョンでは、ダイアログボックスの代わりにファイルに記録された完全で詳細なレポートが提供されます。これを自家製の「memoryleak-logfile-differ」と組み合わせると、すべて既存のバグハントの準備が整います。
AQTime とても良いです。また、パフォーマンスのプロファイリングなどの他のことも行います。また、コードを変更する必要はありません。もちろん、デバッグ情報を使用してコンパイルすると、より良い結果が得られます。
私は常にReportMemoryLeaksOnShutdownを使用します:=(DebugHook <> 0);デバッグしている場合にのみリークが報告されるようにします。
psはこれをコメントに入れたかったのですが、私にはまだ権利がありません。
このCodeRage2セッションをご覧になることをお勧めします: ダミーのメモリリークとの戦い 。主に、FastMMを使用してDelphiのメモリリークを防止/検出する方法を示します。 D2007用でしたが、それでもD2009に関連しています。
私は MadExcept を使用します。これは、個人使用は無料だからです。
試してみてください MLD 1. 試してみました!! Delphi開発用のリークフリーDelphiアプリケーション開発およびバグレポートツールのスマートソリューション。