首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 測量程式執行時間與 CPU 時間 — Stopwatch vs TotalProcessorTime

     編輯:關於C語言

兩種時間的差異

  • 實際經過時間 (Wall-clock):Stopwatch 測量,包含等待、I/O、排程切換等所有時間。
  • CPU 時間:Process.GetCurrentProcess().TotalProcessorTime 取得,僅包含執行緒實際佔用 CPU 的時間。

測試程式碼


private void ShowRunTime()
{
    TimeSpan cpuStart = Process.GetCurrentProcess().TotalProcessorTime;
    var sw = Stopwatch.StartNew();

    const int Circles = 1000;
    for (int i = 0; i < Circles; i++)
        Console.WriteLine(i);

    double cpuMs = Process.GetCurrentProcess().TotalProcessorTime.Subtract(cpuStart).TotalMilliseconds;
    sw.Stop();

    Console.WriteLine($"迴圈次數:{Circles} CPU時間(ms)={cpuMs:F3} 實際時間(ms)={sw.Elapsed.TotalMilliseconds:F3}");
    Console.WriteLine($"1 tick = {sw.Elapsed.TotalMilliseconds / sw.Elapsed.Ticks:F6} ms");
}

輸出範例

迴圈次數:1000 CPU時間(ms)=50.072 實際時間(ms)=666.907
1 tick = 0.000100 ms

差異原因分析

  1. 多任務排程:Windows 依執行緒分時輪詢,程式執行中可能被剝奪 CPU 給其他程序。
  2. 等待不佔用 CPU:Console.WriteLine 內部涉及 I/O 等待,此期間不佔用 CPU 但消耗實際時間。

結論與建議

  1. 效能測量以實際時間為主,CPU 時間作為輔助參考。
  2. 若兩者差距極大,需檢視是否存在過多 I/O、鎖競爭、排程延遲等問題。
  3. Stopwatch 精度可達 0.1 微秒 (1/10,000 ms),滿足大多數測量需求。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved