0

私は高速に実行する必要がある処理プラグインに取り組んでいます (パフォーマンスは重要です - 少なくともある程度まで)。処理部分を実行するエンジンと、それを処理するシェルがあります。

  • 通信
  • メッセージ
  • GUI
  • ログ
  • エンジンを呼び出す

Visual Studio で行った分析は次のとおりです。 ここに画像の説明を入力

パーセントは、ホストであるプロセスのサンプルに関連しています。

  • このホストはほとんど何もせず、サンプルの 12.19% のみを使用しています。
  • 私のシェルは 50% を排他的に使用しています
  • エンジン (シェルによって呼び出される) は排他的に 12.8% を使用しています。

ご覧のとおり、私のシェルの処理部分 (BaseProcessor::process および含まれるすべての関数呼び出し) は約 15% で、エンジン単体よりも 3% 多いだけです。これは、「シェル」のオーバーヘッドがそれほど大きくないことを意味します。

しかし、私の「シェル」は、並行性に関する関数でより多くの時間を費やしています (排他的および包括的)。これらの関数は、VS CRT コードのthreadproxymainコードの一部です。

これは何concurrency::detailsですか、どうすれば解決できますか

私は std::atomic と futures を少し使用していますが、AFAIK の作業スレッドでスリープ状態になっています。

ご提案ありがとうございます。

[編集]

いくつかのテストの後 (精度を向上させるためにさらに多くのサンプルを使用)、問題はたまたまこれを呼び出すコードにありましたが、このビューには表示されませんでしたが、排他的なサンプル/モジュールは、どの DLL がこの CPU をすべて使用しているかを見つけるのに役立ちました。その後、関数の詳細ビューを使用して、呼び出しが CLogBuffers から行われたことがわかりました (このビューでは 5% を含みます)。

私の間違いを指摘してくれてありがとう

4

1 に答える 1