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 ミリ秒/分の速度で発散しています。
私が認識していないウィンドウに、より正確になる別の時間機能はありますか? そうでない場合、高解像度のクロックまたはサードパーティのライブラリを作成するためのより良い方法はありますか?