当我的计算机进入睡眠状态时,C# 秒表是否会暂停

本文关键字:是否 暂停 状态 计算机 我的 | 更新日期: 2023-09-27 18:34:46

我正在用秒表测量我的程序(用 C# 编写(的运行时。我的电脑进入睡眠状态,我不知道它显示的时间数据是否正确。那么Stopwatch是否也在测量睡眠时间,或者它被暂停然后继续?

当我的计算机进入睡眠状态时,C# 秒表是否会暂停

当计算机进入睡眠状态时,秒表不会暂停。

它使用 Windows API QueryPerformanceCounter() 函数,该函数在计算机进入睡眠状态时不会重置计数:

"QueryPerformanceCounter 读取性能计数器并返回 自 Windows 运行以来发生的时钟周期总数 系统已启动,包括机器处于睡眠状态的时间 待机、休眠或连接待机等状态。

根据StopWatch的源代码,该方法Start如下所示:

public void Start() {
    // Calling start on a running Stopwatch is a no-op.
    if(!isRunning) {
        startTimeStamp = GetTimestamp();                 
        isRunning = true;
    }
}

该方法Stop如下所示:

public void Stop() {
    // Calling stop on a stopped Stopwatch is a no-op.
    if( isRunning) {
        long endTimeStamp = GetTimestamp();                 
        long elapsedThisPeriod = endTimeStamp - startTimeStamp;
        elapsed += elapsedThisPeriod;
        isRunning = false;
        if (elapsed < 0) {
            // When measuring small time periods the StopWatch.Elapsed* 
            // properties can return negative values.  This is due to 
            // bugs in the basic input/output system (BIOS) or the hardware
            // abstraction layer (HAL) on machines with variable-speed CPUs
            // (e.g. Intel SpeedStep).
            elapsed = 0;
        }
    }
}

因此,您的问题的答案是:它通过使用两个时间戳来测量持续时间,从而得出结论,您的计算机是否进入睡眠状态并不重要。

更新(感谢迈克和乔(:但是,如果您的计算机处于睡眠状态,则它无法运行您的程序 - 因此测量的持续时间将是程序运行的持续时间和计算机休眠的持续时间的总和。 TotalDuration = CalculationDuration + SleepDuration .