8

マルチスレッド アプリケーションがあり、コードの特定のセクションで を使用しStopwatchて操作の時間を測定しています。

MatchCollection matches = regex.Matches(text); //lazy evaluation
Int32 matchCount;
//inside this bracket program should not context switch
{
    //start timer
    MyStopwatch matchDuration = MyStopwatch.StartNew();
    //actually evaluate regex
    matchCount = matches.Count;
    //adds the time regex took to a list
    durations.AddDuration(matchDuration.Stop());
}

問題は、ストップウォッチが開始されている間にプログラムが別のスレッドに制御を切り替えると、時間の経過が正しくないことです。コンテキストがこのセクションに切り替わる前に、他のスレッドが何らかの作業を行った可能性があります。

ロックについて質問しているわけではないことに注意してください。これらはすべてローカル変数であるため、その必要はありません。時限セクションを継続的に実行したいだけです。

編集:別の解決策は、コンテキスト切り替え時間を差し引いて、時間指定セクションで作業を行った実際の時間を取得することです。それが可能かどうかはわかりません。

4

2 に答える 2