2

私は自分のプログラムの 2 つのバージョンを書きました。これは C++ の進化的アルゴリズムです。最初のバージョンは手続き型で、うまく動作し、非常に高速です。2 番目のバージョンは完全に OOP であり、プログラムは結果を見つけますが、非常に遅いです (最初のバージョンよりも 10 倍遅いなど)。ループ内のコードのセグメントの時間を測定する方法などはありますか? どんなアドバイスやアイデアも役に立ちます。前もって感謝します。

4

5 に答える 5

1

プログラム内のパフォーマンス関連の問題を見つけるには、プロファイラーが必要です。

Visual Studio のエディションに応じて、Visual Studio にはさまざまなレベルのプロファイリング サポートがあります。幸運にも Visual Studio Ultimate または Premium エディションを使用している場合は、非常に優れたプロファイリング サポートが組み込まれています。

Visual Studio Express または Visual Studio Professional を使用している場合、悲しいことに、Visual Studio にプロファイリング サポートが組み込まれていませんが、このリンクの例の情報を使用して、これらのエディションで無料で手動で行うことができます。

于 2012-09-07T05:17:26.733 に答える
1

プロファイラーを使用します。どちらが最適かは、プラットフォーム/動作環境によって異なります。たとえば、g++ では gprof を使用できます。または、再コンパイルしたくない場合は、Linux を想定して oprofile を使用できます。Solaris では dtrace を使用できます。Windows や Mac などの他のプラットフォームでは、プラットフォームのタグを質問に追加してください...

于 2012-09-07T05:05:07.000 に答える
0

特定のケースでは、このツールをダウンロードして使用することをお勧めします: http://www.codersnotes.com/sleepy/

これは非常に単純な (しかし効率的な) サンプリング プロファイラーです。Visual Studio で Ctrl+F5 (リリース) を使用してアプリを起動し、このプログラム (Very Sleepy) を実行し、exe 名をダブルクリックして待機するだけで、関数名を含む詳細なレポートが表示されます。

次のレベルでは、必要に応じて VTune を使用します。

于 2012-09-07T05:35:12.973 に答える
0

プロファイラーを使用します。gcc でコンパイルしている場合は、たとえば gprof を検索します。

于 2012-09-07T05:05:16.927 に答える
0

\callcapVS でコンパイラ フラグを使用できます。ここでそれについて読むことができます。

.cpp基本的に、分析したいファイルに対してのみこのフラグを追加し、開始/終了関数を定義し、アプリを再ビルドして実行できます。分析しようとしている (そして遅いと思われる) コードを関数に分割することをお勧めします。そうすれば、実行に時間がかかるコードを確認できます。

すでに利用可能なプロファイラーと比べると少し手間がかかりますが、試してみる価値はあります。

于 2012-09-07T06:09:55.123 に答える