我有一个用C#,VS 2005编写的程序。它具有记录数据和时间戳的功能。我需要毫秒级的时间分辨率,因为数据采样周期时间可能为 50 毫秒或更短。我使用DateTime.Now.Millisecond来检索系统时间,但我发现在某些计算机上,两个时间戳之间的实际间隔不是50ms而是62-63ms。
所以我简化了我的代码并在几台计算机上进行了尝试,代码如下:
static void Main(string[] args)
{
while (true)
{
Thread.Sleep(50);
Console.WriteLine("{0}", DateTime.Now.Millisecond);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 Win7 SP1 上的结果:
928 991 53 116 178 240 306 368 431 493 555 618 ...
请注意,间隔约为 62-63ms。
我知道Windows NT系列操作系统的时间分辨率约为16ms,所以我对结果并不感到非常惊讶。
但是,问题是,当我在其他一些 Win7(SP1) 计算机上测试相同的程序时,结果是准确的,并且间隔几乎总是 50ms,我不知道为什么行为差异如此之大。
所以,我的问题是:
顺便提一句,
1)我在Win10上测试,间隔约为50-51ms。
2)我尝试使用秒表,但没有效果。
3)Environment.TickCount也不准确。
4)我尝试使用VS 2015,结果相同。
=========================================
这是我的新测试代码:
static void Main(string[] args)
{
long ticks = DateTime.Now.Ticks;
int tEV = Environment.TickCount;
while (true)
{
Thread.Sleep(50);
Console.WriteLine("{0}, {1}, {2}",
DateTime.Now.Ticks - ticks,
DateTime.Now.Millisecond,
Environment.TickCount - tEV);
ticks = DateTime.Now.Ticks;
tEV = Environment.TickCount;
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出结果,我们可以看到第二列(DateTime.Now.Millisecond),间隔正好是 50 毫秒,而最后一列(TickCount)有所不同。
510000, 547, 47
500000, 597, 62
500000, 647, 47
500000, 697, 47
500000, 747, 46
500000, 797, 47
500000, 847, 63
500000, 897, 46
500000, 947, 47
500000, 997, 47
500000, 47, 47
500000, 97, 62
500000, 147, 47
500000, 197, 47
500000, 247, 47
500000, 297, 46
500000, 347, 63
500000, 397, 47
500000, 447, 46
500000, 497, 47
500000, 547, 47
500000, 597, 62
500000, 647, 47
500000, 697, 47
500000, 747, 47
500000, 797, 62
500000, 847, 47
500000, 897, 47
500000, 947, 47
500000, 997, 46
500000, 47, 63
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |