Является ли сеансом секундомера .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();
}
}
}