2012-02-24 13 views
0

私はC++から生成されたプログラムの.exeを持っています。プログラムの所要時間を測定する

私はちょうどプログラムによって取られた時間を得るために挿入することができるいくつかの簡単なスニペットはありますか?私は利用可能なC++コードを持っていますが、それほど微調整したくありません。

+0

http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-lineにはいくつかのソリューションがあります。 – timrau

答えて

2

Boost.Timersについて読んでください。時間を測定するためのコードサンプルは次のようになります。

#include <boost/timer/timer.hpp> 

boost::timer t0; 
// do smth 
std::cout<<"elapsed: "<< t0.elapsed() << " s\n"; 
0

あなたのプログラムの一部(または全部)にかかる時間を測定する簡単な方法は、開始時に、現在の時刻のスナップショットを取得し、その後からそれを減算することです最後の現在時刻。 Windowsでは、これにはGetTickCount関数を使用できます。私は、一般的に、ほとんどのヘルパー構造体でこれをラップ:

struct Duration { 
    Duration(const char *name) 
    : m_start(::GetTickCount()), 
    m_name(name) 
{ } 

    ~Duration() { 
    std::cout << m_name << " executed in " << ::GetTickCount() - start << "ms" << std::endl; 
    } 

    const DWORD m_start; 
    const std::string m_name; 
}; 

あなたはこのようにそれを使用することができます:

int main() 
{ 
    Duration d("Program"); 

    // Heavy work being done here 
} 

Durationオブジェクトが破棄されると少しタイミング情報がstdoutに印刷されています。

+1

学問的なコードでは大丈夫かもしれませんが、アプリケーション/計算ロジックにとどまらず、出力ステートメントをデストラクタに追加することは非常に悪い習慣です。 – Neowizard

+0

@Neowizard:絶対に同意します。しかし、コードのいくつかの部分を実行する必要がある時間を把握したい場合(オブジェクトの有効期間を制限するためにカスタムスコープを導入する場合は、このDurationクラスをうまく使用できます)、素早く分離され、モジュール化されることは望ましくありません、依存性注入ベースのプロファイリングフレームワーク。あなたはデバッグしている間にちょっとしたハックをして仕事をしたいだけです - とにかくコミットに終わることはありません。 –

+0

私は同意します。実行時に関連するテスト/デバッグを行う簡単な方法です。ちょうど良い生産アイデアではないことを指摘したい – Neowizard

0

UNIXの場合、実行可能なコマンドの前に "time"という接頭辞を付ける必要があります。偶然にCygwinがインストールされている場合は、それを使用することをお勧めします。それ以外の場合は、Performance Countersをチェックしてください。これは、MSプラットフォームのプロセスパフォーマンスデータのソースです。アプリが終了する前に、1つの追加のメソッドコールの痛みでこのトリックを行うことは可能です。

関連する問題