Czy godzina System.Diagnostics.Stopwatch
liczyć czas podczas komputera stać?Czy .NET Stoper działa w trybie gotowości/uśpienia/hibernacji?
15
A
Odpowiedz
3
Tak robi.
Patrząc na kod reflektor pokazuje, że jeśli nie jest Stopwatch.IsHighResolution
, następnie użyje liczbę kleszczy (w moim środowisku, wartość była false
więc będzie używać 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;
}
+0
Tak, robi. Ale bardzo niedokładne. Zobacz moją odpowiedź. –
3
Po kilku próbach numer wyświetla się jako, ale był już odłogowany. To, co zrobiłem:
- napisał poniższy kod
- Ran, i natychmiast umieścić mój komputer w uśpienia trybu
- Czekaliśmy 10 sekund i przyniósł mój komputer z powrotem
Rezultatem był szokujący czas Elapsed
wynoszący ponad 4 minuty. Daleko. Więc nie użyłbym tego jako jakiegokolwiek punktu odniesienia.
Oto kod użyłem:
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();
}
}
}
Ciekawe pytanie, Użyłem Stopwatch tylko do profilowania biednych ludzi, więc nigdy nie przyszło mi to do głowy. – Davy8
Dobre pytanie .... wypróbuj i daj nam znać :) –
Jak widać z odpowiedzi, jest to zachowanie specyficzne dla implementacji. Licznik jest opakowany przez warstwę abstrakcji sprzętu systemu operacyjnego, dając projektantom sprzętu wiele opcji do cięcia groszy. –