9

LinuxでコードをプロファイリングできることはわかっていますgprofkprofWindows でこれらのアプリケーションに匹敵する代替手段はありますか?

4

4 に答える 4

3

Linux バリアントとほぼ同じように動作する gprof の MinGW ポートがあります。完全なMinGW インストールを取得するか(gprof が含まれていると思いますが、確かではありません)、MinGW binutils パッケージから gprof を取得できます。

Eclipse にはTPTPがありますが、私の知る限り、C/C++ のプロファイリングをサポートしていません。

于 2010-02-20T14:12:44.403 に答える
3

商用ソフトウェア:

  • Rational Quantify (高価で遅いが非常に詳細)
  • AQTime (安価、低速、やや詳細)

フリーソフトウェア:

これらの商用の代替手段は、コンパイルされたコードを「インスツルメンテーション」(命令の追加) することによって変更し、追加された命令でタイミングを実行します。これは、アプリケーションの速度が著しく低下することを意味します。

これらの無料の代替手段はサンプリングを使用します。つまり、詳細度は低くなりますが、非常に高速です。実際に、特に Very Sleepy は、アプリケーションのパフォーマンスの問題をすばやく確認するのに非常に適していることがわかりました。

于 2010-02-20T14:16:10.933 に答える
0

プロファイリングの理由は何ですか?a)時間を測定してコールグラフを取得するか、b)コードを高速化するために変更するものを見つけますか?(これらは同じではありません。)

(b)Eclipseの[一時停止]ボタンを使用して、このトリックを使用できる場合。


追加:パフォーマンスの問題が実際にどのようなものであり、どこでそれらを見つけることができるかについての経験を伝えるのに役立つかもしれません。ここにいくつかの簡単な例があります:

  • ソートされる項目が文字列であり、文字列比較関数によって比較される挿入ソート(順序n ^ 2)。ホットスポットはどこですか?文字列で比較します。問題はどこだ?string-compareが呼び出されるソート。n = 10の場合は問題ありませんが、n = 1000の場合、突然時間がかかります。string-compareが呼び出されるポイントは「コールド」ですが、それが問題です。コールスタックの少数のサンプルは、確実にそれを特定します。

  • プラグインをロードするアプリは起動に時間がかかります。プロファイラーは、基本的にその中のすべてが「コールド」であると言います。I / O時間を測定するものは、ほとんどすべてのI / O時間であると言っていますが、これはあなたが期待しているように見えるので、絶望的に見えるかもしれません。ただし、スタックサンプルは、文字列定数をローカル言語に変換する目的でプラグインdllのリソース部分を読み取るプロセスの約20層の深さで、スタックに多くの時間が費やされていることを示しています。さらに調べてみると、翻訳されている文字列のほとんどは、実際に翻訳が必要な種類ではないことがわかります。それらは、翻訳が必要になる可能性がある場合に備えて配置されただけであり、パフォーマンスの問題を引き起こす可能性があるとは考えられていませんでした。この問題を修正すると、大幅な時間の節約になります。

したがって、「ホットスポット」と「ボトルネック」の観点から考えるのが一般的ですが、ほとんどのプログラム、特に大きなプログラムでは、実際には実行する必要のない作業を要求する関数呼び出しの形でパフォーマンスの問題が発生する傾向があります。幸いなことに、彼らは彼らが費やしている時間の間にコールスタックに自分自身を表示します。

于 2010-02-22T13:00:00.823 に答える
0

はい、 Visual Studio でコードをプロファイリングできます

于 2010-02-20T14:05:43.327 に答える