2

3 つの主要なソフトウェア コンポーネントで構成されるシステムを開発しています。クライアント アプリケーション、コア アプリケーション、交換アプリケーションはすべて同じサーバー上で実行されます。メッセージはクライアント アプリで受信され、コア アプリに中継されてから、適切な Exchange アプリに転送されます。

システム内部のメッセージのレイテンシを測定したいので、メッセージがクライアントで受信されたときにタイムスタンプを付け、コアでタイムスタンプを付け、メッセージが交換モジュールから送信されたときにタイムスタンプを付けます。

QueryPerformanceCounter() を使用して複数のアプリケーション間でイベントの時間を測定することは合理的ですか? 複数のコアを実行しているアプリケーション間では、カウンターは信頼できないようです。

4

2 に答える 2

1

クライアント接続を開き、タイムスタンプ付きのメッセージを 1 回、たとえば 10000 回循環させる交換アプリを追加するのはどうでしょうか。遅延が加算されるため、ウォールタイムスタンプを効果的に使用し、終了開始を計算して 10000 で割ることができます。

于 2013-04-11T15:13:07.720 に答える
0

Chad が指摘しているように、QueryPerformanceCounter はこの目的には問題なく機能します。MSDN から「一般に、[QPC からの] パフォーマンス カウンターの結果は、異なるスレッドまたはプロセスで測定された場合でも、マルチコアおよびマルチプロセッサ システムのすべてのプロセッサで一貫しています。」いくつかの例外のみが言及されています...

  1. 特定のプロセッサで実行される pre-vista オペレーティング システムは、この一貫性に違反する可能性があります...
  2. 異なるスレッドは 1 ティックずれている可能性があります。「ティックという用語は、1 ÷ (QueryPerformanceFrequency から取得したパフォーマンス カウンターの頻度) に等しい期間を指します。」
于 2016-09-06T21:07:25.297 に答える