我正在尝试实现一个时间服务,该服务将以超过 1 毫秒的精度报告时间。我认为一个简单的解决方案是进行初始测量并使用 StopWatch 为其添加增量。问题在于,这种方法似乎与挂壁时间的分歧极快。例如,以下代码尝试测量 Wall Time 和我的高分辨率时钟之间的差异:
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 毫秒/分钟的速度发散。
Windows 中是否有另一个我不知道的时间设施会更准确?如果没有,是否有更好的方法来创建我应该使用的高分辨率时钟或第 3 方库?