web-dev-qa-db-ja.com

Delphiのプロファイラとメモリ分析ツール

私は最近Delphi 4からDelphi 2009にアップグレードしました。Delphi4では、プロファイラーとして GozProfile by Primoz Gabrijelcic を使用し、メモリ分析とリークデバッグに Turbo PowerによるMemory Sleuth を使用していました。どちらもうまくいきました。しかし、今はDelphi 2009で動作する新しいツールが必要です。

Delphiのプロファイリング/分析ツールのリーダーは、明らかに AQTime by AutomatedQA です。彼らは最近さえも Memproof by Atanas Soyanov を飲み込んでいましたが、これは優れた無料のメモリ分析ツールであり、その機能をAQTimeに組み込みました。しかし、AQTimeは個々のプログラマにとって非常に高価です。実際には、Delphi 2009へのアップグレードよりも費用がかかります。

だから私の質問は:あなたが満足し、推奨しているDelphiの現在のバージョンでプロファイリングとメモリ分析を行うための、より安価なオプションは他にありますか?


補足:初期の回答者は、Delphiにすでに含まれているFastMMマネージャーがメモリリークの検出に非常に優れていることを示しているようです。

それでは、ソースコードのプロファイリングに代わるものはありますか?

私が気になるのは Michael AdolphによるProDelphi で、これはAQTimeのコストの6分の1未満です。使用しますか? AQTimeは6倍の価値がありますか?


補足2:AQTimeとProDelphiの両方の試用版をダウンロードしました。

AQTimeは、最初は少し圧倒的で少し混乱しました。それを接続するために必要ないくつかのトリックを見つけるのに数時間かかりました。

ProDelphiは、私が慣れているGpProfileと非常によく似ていました。しかし、そのウィンドウは雑然としていて混乱しており、GpProfileほどよくありません。

私にとって大きな違いは次のようです:

  1. ProDelphiがコードを変更します。 AQTimeはサポートしていません。コードを変更すると、何か問題が発生した場合にデータが破損する可能性がありますが、GpProfileを使用した私の経験では、それは決して起こりませんでした。プラス1つはAQTimeです。

  2. ProDelphiでは、最適化をオフにする必要があります。しかし、プロファイリングしたいのは、最適化をオンにしたプログラムと、その実行方法です。プラス1つはAQTimeです。

  3. ProDelphiは、関数またはプロシージャまでしかプロファイルできません。 AQTimeは個々の行まで下がることができます。 AQTimeのプラス2。

  4. ProDelphiには、20のルーチンをプロファイリングする無料バージョンがあり、そのプロバージョンの費用は100米ドル未満です。 AQTimeは600米ドルです。 ProDelphiのプラス4。

スコアは現在4-4です。どう思いますか?


付録3:Primoz Gabrijelcicは、GpProfileを再び機能させる予定です。以下の回答のいくつかについての彼のコメントを参照してください。 StackOverflowで Gabr として彼。


補遺4:結局のところ、プロファイラーソリューションがあるようです。 Andreのオープンソースasmprofiler、以下で説明 を参照してください。

54
lkessler

価格のために、あなたはメモリトラッカーとしてFastMM4に勝ることはできません。使い方は簡単ですが、強力で、Delphiとよく統合されています。
何かをダウンロードしたり、インストールしたり、変更したりせずに、この行を置くだけでご存知だと思います

ReportMemoryLeaksOnShutDown := True;

コードの任意の場所で、メモリリークの基本的なレポートを有効にします。
クラッシュ情報などの詳細が必要な場合、EurekaLogは私たちが使用する非常に優れた製品です。 MadExceptにも良い評判があります...

特にプロファイリング用に、AQTimeがあります。

GpProfileについては、バグを報告してバグを修正できます gabr on SO for update ...またはgo and 自分でgpProfileをオープンソースとして更新する 。;-)

35
François

Delphiのオープンソースプロファイラを作成しました: http://code.google.com/p/asmprofiler/

完璧ではありませんが、無料でオープンソースです:-)。

私がそれを作った主な理由は、正確な呼び出しツリーを見落としたためです。たとえば、ProDelphiはすべての呼び出しの要約と合計数のみを保存するため、特定の時間(または期間)に特定のプロシージャが何を呼び出したかを確認することはできません。そして、それはタイムチャートを持っているので、あなたは通話時間が時間とともにどのように変化したか見ることができます。

33
André
24
Mohammed Nasman

プロファイリングに関してAQtimeに非常に満足しています。

7
Nick Bradbury

GpProfileとAQTimeの両方を使用したことで、ボトルネックの原因となっているメソッド呼び出しを見つけるのに効果的であることがわかりました。

ただし、AQTimeは、ソースコードに変更を加えなくても、コードのどの行がこれを引き起こしているのかも教えてくれます(ただし、TD32デバッグとdebug dcusで最適に機能します)。

最近、これを使用してルーチンを約30倍高速化しました(内部ライブラリ関数の不適切な使用のため)。

しかし、私はそれを自分で支払う必要はありませんでした!

4
Gerry Coll

私たちはAQTime Proを使用しており、満足しています。 Smartbearは最近、完全に無料の AQTime標準版 をリリースしました。ほとんどの機能はまだ残っていますが、もちろん 少し削除されました

3

ProDelphiのインターフェースについてはあなたの意見に同意しますが、それでも十分満足のいく結果が得られます。重大なパフォーマンスの問題が発生した場合にのみ、非常にまれにプロファイルを作成する必要があります。これは、常に問題をすばやく見つけるのに役立ちます。お金のために非常に良い値、そしてマイケルは新しいバージョンのためにそれを更新し続けることについてかなり良いようです。

私が提案することの1つは、コードを挿入する必要があるため、ある種のVCSですべての関連コードを使用することは非常に価値があるということです。プロファイリングが必要な場合、次のことを行います。

  • すべての関連ファイルをチェックインします
  • それらをすべてチェックしてください
  • 次に、必要なプロファイリングを行います。
  • すべてのチェックアウトをキャンセルし、効果的に元の場所にロールバックします。
2
RichardS

Delphi Areaでプロファイラコンポーネントを試してみましたか これはソース付きのフリーウェアで、次のように書かれています。

コードの実行時間を無料で簡単かつ正確に測定する方法を探しているなら、TProfilerが最適です。 TProfilerは、コード内に名前付きタイマーを作成できるようにする非ビジュアルでデバッグ用のコンポーネントです。

TProfilerの各タイマーは、次の情報を提供します。

タイマーがアクティブになった回数(ヒットカウント)合計実行時間各ヒットの平均実行時間最初のヒットの実行時間最後のヒットの実行時間最小実行時間のヒット最大実行時間のヒット

2
lkessler

プロファイラーについては、Gurock Softwareの SmartInspect を試してみてください。私はGpProfileを使用したことはありませんが、その機能セットを一目見ただけでSmartInspectを思い出しました。興味深いことに、それはプロファイラーであるとは主張していませんが、GpProfileと同じように見えます(私が何かを見落としている場合を除きます)。 Delphi 2009をサポートし、無料の試用版があり、AQTimeよりも少し安いです。

:SmartInspectはプロファイラーではなくロガーです。

1
Jim McKeeth

それは本当です、プロファイリングのために私はPrimozのGpProfileを見逃しており、良い代替品を見つけていません。私はかつてAQTimeを試しましたが、値段の割には満足していませんでした。

ただし、メモリリークと危険なメモリアクセスを追跡するために、FastMM4を使用している場合よりも満足することはできませんでした。

1
mghie

私は長い間ProDelphiを使用してきましたが、自分のニーズを満たすことがわかりました。

システムが提供するデータを使用することで、システムのパフォーマンスを向上させる素晴らしい結果を得ることができました。

小規模なプロジェクトの場合、無料バージョンで問題ありません。

大規模なプロジェクトの場合は、(有料)プロバージョンが必要です。

1
Peter Ingham

FastMM4メモリマネージャー この古い回答に記載 ( "delphiアプリケーションのメモリの断片化を監視または視覚化する方法")は、実行時に照会できる(および付属のデモアプリケーションを使用してグリッドに表示できる)すべての割り当てのリスト。統計情報はブロックサイズごとであるため、どのオブジェクトがリークしているかは正確には表示されません。ただし、サーバーやサービスなど、運用中のアプリケーションを長時間監視する場合には役立ちます。現在、それを(商用)Webアプリケーションサーバーフレームワークに「VisualMM」アドオンとして統合しています。

0
mjn