1

Windows C ++コンソールベースのネットワーク集約型アプリケーションを開発しましたが、データ通信中は低速のようです。

コードベースは巨大なので、全体的なパフォーマンスのボトルネックとなる特定の関数/コード行を指すことができるプロファイラーツールを探しています。

VS 2010で利用可能な「パフォーマンスツール」を使用してみましたが、アプリケーションをプロファイリングするために実行するとクラッシュします。

Error Message: Injection of Runtime library failed.

また、Very Sleepyを使用してみましたが、関数が表示されません。ソースコードをポイントできないことが原因である可能性があります(ただし、正しく使用されていない可能性があります)。

誰かがWindowsC++コンソールベースのアプリケーション用に無料で入手できる優れたプロファイラーを提案できますか?

評価に基づいて、プロファイラーの商用バージョンも進めます。

よろしくお願いします。

4

3 に答える 3

4

Intelベースのマシンを使用している場合は、VTuneを使用します。AMDマシン上にある場合、CodeAnalystは同様の製品です。

VTuneはトライアルライセンスで利用できると思います。CodeAnalystは無料で利用できます。

これらのツールはコンソールベースではありませんが、コンソールベースのアプリケーションのプロファイリングには使用できます。

于 2013-03-12T09:07:40.527 に答える
1

いくつかの「問題」、またはそれをより速くする方法がある可能性があります。ローカライズされていないことが多いため、「ボトルネック」とは呼びません。通常、これらは完全に優れたコードです。「クリティカルパス」上にあるとは想定されていませんでした。

問題が修正されたときに、これらのパーセンテージが節約されると仮定します。

ここに画像の説明を入力してください

それらの1つを見つけるだけで、ある程度のスピードアップが得られます。Aを見つけた場合と同様に、1 /(1-0.3)= 1.43または43%のスピードアップが得られます。そうすれば、ほとんどの人と同じように、幸せになってやめることができます。ただし、続行してBも見つかった場合、合計スピードアップは1 /(1-0.51)= 2.04または104%になります。BがAよりも小さかったとしても、これは43%をはるかに超えています。Cを修正すると最大2.92倍速くなり、Dを修正すると4.2倍速くなります。

何?小さな問題を修正すると、より高い見返りがありますか?スピードアップ要因が複合するため、それらは可能です。AとBをこの順序で修正すると、1.43 * 1.43=2.04になります。逆の順序で修正すると、1.27 * 1.61=2.04になります。

何かを修正するたびに、他の問題はより大きく、パーセンテージで、見つけやすくなり、スピードアップは高利回りの投資のように蓄積されます。A、B、C、D、およびEを修正するまでに、残っているのはFであり、5%ではなく30%です。それらすべてを修正すると、8.5倍速くなります!ただし、プロファイリングツールがそれを公開できないために、Dのように1つを見逃した場合、4.5倍速くなります。

それはあなたが問題を見つけないために支払う代償です。

そのため、私は手動の手法に依存しています。プロファイラーと比較して、プロファイラーと比較して、検出したすべての問題を検出し、そうでない問題を検出するためです。プロファイラーは、測定の精度など、問題の発見に役立たない周辺の問題に関心を持つことがよくあります。理由がわからない場合は、ここに数学があります。

于 2013-03-12T12:47:49.640 に答える
0

C++プロファイラーツールが機能するはずです。

アプリケーションがI/Oをどのように実行するかは関係ありません(たとえば、「コンソールベース」)。それはファイルの巨大なシステムを処理します。また、C ++ 11だけでなく、C++のGNUおよびMS方言も処理します。

商業。(MS Visual C ++で動作する無料のプロファイラーが見つかるとは思えません)。

于 2013-03-12T09:29:59.907 に答える