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

C# Stopwatch 類別效能測試實戰(三):結果讀取與精度選擇

     編輯:關於C語言

前言

承接前兩篇,本文著重於 Stopwatch 計時結束後的結果讀取,詳細比較三種屬性的精度與適用場景,並提供完整範例程式碼。

核心屬性比較

屬性回傳型別精度適用場景
ElapsedTimeSpan最高(100 奈秒)需精確時間間隔、格式化輸出
ElapsedMillisecondslong(毫秒)中等較長時間測量、不需亞毫秒精度
ElapsedTickslong(計時器刻度)原始刻度極高精度需求、自行換算頻率

注意:Stopwatch.Frequency 為每秒刻度數,TimeSpan.Ticks 單位固定為 100 奈秒,兩者不同。

完整範例程式碼

using System;
using System.Diagnostics;

namespace StopWatchDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch timer = new Stopwatch();
            long total = 0;

            timer.Start();
            for (int i = 1; i <= 10_000_000; i++)
                total += i;
            timer.Stop();

            // 以 Elapsed.Ticks / 10 得到微秒數(1 Tick = 100ns = 0.1μs)
            decimal microseconds = timer.Elapsed.Ticks / 10m;
            Console.WriteLine($"執行時間:{microseconds:F1} 微秒");

            // 輔助屬性示範
            Console.WriteLine($"IsRunning:{timer.IsRunning}");
            Console.WriteLine($"ElapsedMilliseconds:{timer.ElapsedMilliseconds} ms");
            Console.WriteLine($"ElapsedTicks:{timer.ElapsedTicks}");
            Console.WriteLine($"Frequency:{Stopwatch.Frequency} Hz");
        }
    }
}

進階用法

  • StartNew():靜態工廠方法,等同 new Stopwatch().Start(),適合一次性計時。
  • Reset():歸零計時器,配合 Start() 可重複使用同一實例。
  • 多執行緒環境下 Stopwatch 為執行緒安全,但啟停操作非原子性,高併發場景需自行同步。

結語

選擇正確的 Stopwatch 屬性對效能分析至關重要。短微基準測試請用 Elapsed 或 ElapsedTicks;長時間監控則 ElapsedMilliseconds 足矣。善用 StartNew 簡化代碼,並注意 Frequency 在不同硬體上的差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved