0

IBM Quantify を使用して、プログラム内のさまざまな関数呼び出しの実行時間を比較しようとしていますが、頭痛の種は、多くの関数呼び出しに DEBUG マクロが次のようなものを出力していることです。

#ifdef DEBUG
cout << "Value is "<< value << endl;
#endif

プロファイリングを行ったところ、これらの IO 操作にほとんどの時間がかかることがわかりました。もちろん、気になるのは、リリースされたバージョンの実際の実行時間です。これらの DEBUG マクロを手動で削除する代わりに、リリースされたバージョンのより正確な結果を得るためにできることはありますか?

デバッグ モードで Visual Studio コンパイラを使用してコードをビルドしています。-o オプションを使用してビルドすると、デバッグ情報がないとプロファイリングを実行できません。

4

2 に答える 2

3

プロファイリングには必ずリリース ビルドを使用することをお勧めします。プロジェクト設定を変更して、リリース ビルド用に PDB を発行できます。

于 2012-05-31T22:07:28.197 に答える
0

問題を 2 つの部分に分けます。時間の全体的な測定と、パーセントの取得です。全体的な測定は簡単です。少なくとも数秒かかるのに十分な作業を行ってから、時間を計るだけです。必要に応じて、10 回または 1000 回ループします。

次に、実行中にパーセントを取得するために、いくつかのスタックショットをキャプチャします。スタック グラバーを使用するか、一時停止ボタンを (繰り返し) 押して、コール スタックをコピーして貼り付けることができます。関数がアクティブである時間の割合は、関数がスタック上にある時間の割合であり、それを含むスタック トレースの割合にほぼ相当します。これは、わずかな割合しか使用しない関数についてはわかりませんが、それらを変更してもあまり節約できません。

于 2012-06-01T00:21:53.107 に答える