Является ли сеансом секундомера .NET/sleep/hibernate?

Удерживает ли System.Diagnostics.Stopwatch время отсчета во время ожидания компьютера?

Ответы

Ответ 1

Да, да.

Взгляд на код в Reflector показывает, что если он не Stopwatch.IsHighResolution, тогда он будет использовать количество тиков (в моей среде значение false, поэтому оно будет использовать DateTime.UtcNow.Ticks):

public void Start()
{
    if (!this.isRunning)
    {
        this.startTimeStamp = GetTimestamp();
        this.isRunning = true;
    }
}



public static long GetTimestamp()
{
    if (IsHighResolution)
    {
        long num = 0L;
        SafeNativeMethods.QueryPerformanceCounter(out num);
        return num;
    }
    return DateTime.UtcNow.Ticks;
}

Ответ 2

Собственно, после небольшого тестирования он, кажется, подсчитывает, но это было далеко. Это то, что я сделал:

  • Написал ниже код
  • Отказался от него и сразу же поместил мой компьютер в режим Сон
  • Ожидалось 10 секунд и вернул мой компьютер.

Результат был шокирующим временем Elapsed более 4 минут. Далеко. Поэтому я бы не использовал это как какой-то тест.

Вот код, который я использовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace TestingCode
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch testing = new Stopwatch();

            testing.Start();

            Console.WriteLine("Press any key to stop timer");
            Console.ReadKey();

            testing.Stop();

            Console.WriteLine("Elapsed: {0}", testing.Elapsed);

            Console.WriteLine("Done!!");
            Console.ReadKey();
        }
    }
}