我有一個多線程應用程序,並且在代碼特定部分我使用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());
}
現在的問題是,如果程序控制切換到另一個線程的其他地方,同時啓動秒錶,然後定時時間將是錯誤的。在上下文切換回本節之前,其他線程可以完成任何工作量。
請注意,我不是問鎖,這些都是局部變量,所以沒有必要。我只想讓定時部分連續執行。
編輯:另一個解決辦法是減去上下文切換時間完成的定時部分做工作的實際時間。不知道這是否可能。
謝謝。請參閱編輯。是否有可能測量和減去上下文切換時間,以獲得實際時間在定時部分中完成工作? –
@DavidS .:我不知道有什麼辦法可以做到這一點。但請看更新的另一個想法。 –
你的更新是一個很好的建議!我非常喜歡它。絕大多數正則表達式都很快,所以通過一些理智檢查,平均時間的相對值比我設法解決原始問題更有用。 –