亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用秒表測量 CPU 執行代碼所花費的實際時間?

如何使用秒表測量 CPU 執行代碼所花費的實際時間?

C#
森林海 2022-07-23 18:11:56
我的部分研究項目是使用秒表來測量時間。每個秒表用于不同的任務,以測量 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并測量線程在內核或用戶模式下一起運行所花費的時間。


查看完整回答
反對 回復 2022-07-23
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

如果您處于調試模式,則可以使用診斷工具

當您的應用程序啟動時,轉到菜單:

調試 --> Windows --> 顯示診斷工具


查看完整回答
反對 回復 2022-07-23
  • 2 回答
  • 0 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號