我的部分研究項目是使用秒表來測量時間。每個秒表用于不同的任務,以測量 while 循環應該工作多長時間。我想知道如果我放了很多長任務,這個度量會準確嗎?想法代碼示例:public static void run(){ var tasks= new List<Task<int>>(); foreach(var task in taskList) //taskList is global object with 10 variables inside tasks.Add(Task.Factory.StartNew<int>(()=>taskFunction(task))); Task.WaitAll(tasks.ToArray());}private int taskFunction(task) { Stopwatch watch = new Stopwatch(); while (watch.ElapsedMilliseconds < MaxTime * 1000) { watch.Start(); doSomething(); // takes lot of time; watch.Stop(); doSomethingDiffrent(); }}所以我將創建 10 個任務。如果任務不是由處理器計算的,那么秒表中的時間會運行并浪費嗎?
2 回答

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
如果任務未由處理器計算,則會在秒表運行中計時并浪費。
如果你查看源代碼System.Diagnostics.Stopwatch
你會發現它實際上并沒有運行,沒有浪費。它有兩個時間戳start
,end
它實際上是elapsed
通過計算和添加它們之間的周期來計算的。Stopwatch
請注意,您可以多次啟動和停止,它將測量這些運行之間的累積時間。所以答案是肯定的,它還會計算線程處于非活動狀態的時間。
Stopwatch
同樣由 Microsoft在多處理器環境中運行時應小心:
在多處理器計算機上,線程運行在哪個處理器上并不重要。但是,由于 BIOS 或硬件抽象層 (HAL) 中的錯誤,您可以在不同的處理器上獲得不同的計時結果。要為線程指定處理器親和性,請使用該
ProcessThread.ProcessorAffinity
方法。
另一方面,如果您想測量 CPU 執行代碼所花費的時間,請查看以下鏈接:ExecutionStopwatch。它基本上利用GetThreadTimes
并測量線程在內核或用戶模式下一起運行所花費的時間。
- 2 回答
- 0 關注
- 155 瀏覽
添加回答
舉報
0/150
提交
取消