我正在尝试创建一个包含秒表类使用的应用程序。
Stopwatch sw = new Stopwatch();
sw.Start();
while (play)
{
long timer = sw.ElapsedMilliseconds;
Debug.WriteLine(timer);
}当我测试这个循环并检查运行时间时,我发现程序缺少一些毫秒。
调试器输出中的一些时钟:
31
32
33
34
35
36
37
38
40 <-39未命中
41
42
43
对于如何解决这个问题,有什么建议吗?
发布于 2011-01-31 07:01:36
你损失的毫秒数是因为你的程序并不是唯一在操作系统上运行的程序。
因此,有时其他程序会得到它们的时间片,并且会遗漏几毫秒。
你不能“修复”它。
发布于 2011-01-31 07:03:36
缺少毫秒?您是否期望在一秒钟内看到每毫秒滴答的条目?例如,每秒1000?如果是这样,那么这将永远不会发生。没有精确到1毫秒的计时API。
除了任务切换等其他操作系统进程外,在输出毫秒数据的循环中进行赋值和流输出的事实意味着毫秒精度是不可能的。你需要一台专用的实时机器来获得你想要的输出
发布于 2013-06-05 14:44:57
Debug.WriteLine可能比1毫秒更慢。它没有针对速度进行优化。
您可以添加一个将消息放置到列表中的调用,然后在运行后将该列表写入Debug.WriteLine。您可以添加一个后台任务,将消息发送到Debug.WriteLine。
两者都应该防止计时器错过节拍。
缺少节拍的另一个原因可能是操作系统或另一个程序在两个Debug.WriteLine调用之间执行某些工作。它甚至可能是一台速度很慢的机器。
设置线程优先级或在专用计算机上运行此应用程序应该会有所帮助,但这些类型的计时器问题在Windows上是意料之中的,因为它从未说过这是一个实时操作系统。
https://stackoverflow.com/questions/4846153
复制相似问题