Task非同期実行に (TPL) オブジェクトを使用するアプリケーションがあります。
メイン スレッドは、トリガー (何らかの TCP パケット) を待ってから、いくつかのタスクを実行します。私がやりたいのは、タスクに費やされた時間を測定することです。
コードを見てください。開始/停止Generatorで囲まれた長い操作 ( ) があります。Stopwatch's
Task.Factory.StartNew((t) => {
Stopwatch sw = new Stopwatch();
sw.Start();
Generator g = new Generator();
g.GenerateIntervals(); // lengthy operation
sw.Stop();
GlobalStopwatch.Add(sw.Elapsed);
});
これが問題です。ストップウォッチは の瞬間に使用DateTime.UtcNow.Ticksし、 の瞬間にStart()再び使用しStop()ます。次に、これら 2 つを減算して経過時間を取得します。
Generator問題は、(シングルスレッドシステムの) 他のスレッドが、 (コードから)GenerateIntervals()長い操作を実行している間に、ある程度のプロセッサ時間を取得できることです。つまり、ストップウォッチによって記録された経過時間には、Generaor.GenerateIntervals()時間だけでなく、その間に他のスレッドがジョブを実行した時間も含まれます。
タイムシェアリングメカニズムの結果として他のスレッドからの実行時間を含めずに、あるメソッドがどれだけのプロセッサ時間を要したかを正確に知る簡単な方法はありますか?