Лучший способ реализовать высокое разрешение DateTime.UtcNow в C #?
Я пытаюсь реализовать службу времени, которая будет сообщать время с большей точностью, чем 1 мс. Я думал, что простым решением было бы провести первоначальное измерение и использовать StopWatch для добавления дельты к нему. Проблема в том, что этот метод очень быстро расходится со стеной. Например, следующий код пытается измерить расхождение между настенным временем и моими часами высокого разрешения:
public static void Main(string[] args)
{
System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();
DateTime baseDateTime = DateTime.UtcNow;
s.Start();
long counter = 0;
while(true)
{
DateTime utcnow = DateTime.UtcNow;
DateTime hpcutcnow = baseDateTime + s.Elapsed;
Console.WriteLine(String.Format("{0}) DT:{1} HP:{2} DIFF:{3}",
++counter, utcnow, hpcutcnow, utcnow - hpcutcnow));
Thread.Sleep(1000);
}
}
Я расходлюсь со скоростью около 2 мс / мин на довольно свежем оборудовании.
Есть ли в окнах еще один момент времени, о котором я не знаю, который будет более точным? Если нет, есть ли лучший подход к созданию часов с высоким разрешением или сторонней библиотеки, которую я должен использовать?