12

私は、パフォーマンスとメモリのプロファイラである AQTimeをテストして、Delphi アプリケーションのために多額の費用を費やす価値があるかどうかを確認してきました。

私が驚いたのは、アプリケーションのソース コードを変更したり、パフォーマンスに過度の時間を追加したりすることなく、ソース行レベルのパフォーマンス トレース (各行が実行された回数と行にかかった時間を含む) を提供できることです。デバッグ実行。

彼らがこれを非常に効率的に行う方法は、私が知らないいくつかのテクニック/テクノロジーがここで使用されているのではないかと思います。

コードを変更せずに行ごとに実行をキャプチャするために、彼らがどのような方法を使用しているか知っていますか?

非侵襲的な行ごとのチェックも行う他のプロファイリングツールはありますか?もしそうなら、それらは同じ手法を使用しますか?

4

4 に答える 4

9

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

完璧ではありませんが、無料です:-)。迂回テクニックも使用します。すべての通話を保存するため (プロファイリングする機能を手動で設定する必要があります)、タイム チャート (!) を含む正確な通話履歴ツリーを作成できます。

于 2009-03-23T08:38:07.057 に答える
7

これは憶測にすぎませんが、AQtime はMicrosoft Detoursに似た技術に基づいているのではないでしょうか?

Detours は、x86、x64、および IA64 マシンで任意の Win32 関数を計測するためのライブラリです。Detours は、ターゲット関数のメモリ内コードを書き直すことで、Win32 関数をインターセプトします。

于 2008-11-27T04:37:52.283 に答える
2

特に Delphi については知りませんが、C アプリケーション デバッガーは行ごとのプロファイリングを比較的簡単に実行できます。コードをロードして、すべてのコード パスをコード ブロックに関連付けることができます。次に、すべての条件付きジャンプ命令で中断し、どのコード パスが取られるかを監視します。gdb のようなデバッガーは、カーネルを介して動作し、コードを変更せず、各行が実行されたときに通知を受けるだけなので、比較的効率的に動作できます。何かが原因でブロックが早期に終了する場合 (longjmp)、デバッガーはそれをフックし、発生時にブロックがどこまで到達したかを把握し、それらの行のみをインクリメントできます。

もちろん、コーディングするのはまだ大変ですが、簡単に言うと、カウンターを更新するためのすべての命令で時間を無駄にすることなくコーディングできるということです。

于 2008-11-26T22:07:03.523 に答える
2

長い間廃止された TurboPower には、Sleuth QA Suite と呼ばれる Delphi 用の優れたプロファイリング/分析ツールもありました。AQTime よりもはるかに単純であることがわかりましたが、意味のある結果を得るのもはるかに簡単です。追跡してみる価値があるかもしれません - eBay かな?

于 2008-11-26T22:24:06.890 に答える