基本: 時間計測
dotTrace は、呼び出しの実行時間をいくつかの方法で測定できます: リアルタイム (パフォーマンスカウンタ)、リアルタイム (CPU 命令)、スレッド時間、およびスレッドサイクル時間。
時間測定メソッドは、プロファイリングセッションを構成するときにプロファイラオプションで選択されます。
リアルタイム (CPU 命令)
リアルタイム (CPU 命令) は、現実世界の時刻またはウォールクロック時刻とも呼ばれ、メソッドの入力とメソッドの終了の間に経過した時間です。この方法では、メソッドが CPU を消費して意味のある作業を行う場合と、メソッドがスリープ中、待機中または結合中の場合に違いはありません。dotTrace はどちらの場合も時間を測定します。メソッド入力時およびメソッド終了時に TSC プロセッサーレジスターの値を読み取り、その差を計算します。
リアルタイム (パフォーマンスカウンタ)
リアルタイム (パフォーマンスカウンタ) はリアルタイム (CPU 命令) と似ていますが、時間間隔の測定方法が少し異なります。dotTrace は、パフォーマンスカウンター API を使用して、オペレーティングシステム、ネットワーク、デバイスからパフォーマンスカウンターデータを取得して使用し、時間を測定します。
スレッド時間
スレッド時間は、スレッドが一時停止している(プロセッサーまたはスリープを待っている)ときに一時停止する、スレッド固有のタイマーによって測定された時間です。この種の測定は、サンプリングプロファイリングのためにのみサポートされ、他の方法(約 10ms)よりも低い分解能を有します。
スレッドサイクル時間
スレッドサイクル時間は、スレッドが一時停止している(プロセッサーまたはスリープを待っている)ときに一時停止する、スレッド固有のタイマーによって測定された時間です。これは、アプリケーションコードの時間をさらに正確にする方法です。実際、スレッドサイクル時間はリアルタイム (CPU 命令) に似ていますが、CPU 命令を使って時間を計算しますが、スレッドが実際の作業をしていない時間は考慮していません。
サンプル
リアルタイムとスレッド時間の違いを確認するには、次の例を検討してください。関数は 10 秒間実行されます。ネットワークからのデータを 8 秒間待機しています。そして、残りの 2 秒をスリープまたは待機せずにデータを処理しています。この関数の実際の時間は 10 秒です。この関数のスレッド時間は 2 秒です。
プロファイリングのトレースでは、一般に、OS の制限により、リアルタイムの測定はスレッド時間の測定よりもはるかに高速です(最大 10 倍高速)。サンプリングプロファイリングが使用される場合、両方の種類の時間を測定することは同じオーバヘッドを消費します。