首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET system.diagnostics秒表问题

.NET system.diagnostics秒表问题
EN

Stack Overflow用户
提问于 2011-01-31 06:58:56
回答 3查看 626关注 0票数 0

我正在尝试创建一个包含秒表类使用的应用程序。

代码语言:javascript
复制
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

对于如何解决这个问题,有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2011-01-31 07:01:36

你损失的毫秒数是因为你的程序并不是唯一在操作系统上运行的程序。

因此,有时其他程序会得到它们的时间片,并且会遗漏几毫秒。

你不能“修复”它。

票数 5
EN

Stack Overflow用户

发布于 2011-01-31 07:03:36

缺少毫秒?您是否期望在一秒钟内看到每毫秒滴答的条目?例如,每秒1000?如果是这样,那么这将永远不会发生。没有精确到1毫秒的计时API。

除了任务切换等其他操作系统进程外,在输出毫秒数据的循环中进行赋值和流输出的事实意味着毫秒精度是不可能的。你需要一台专用的实时机器来获得你想要的输出

票数 5
EN

Stack Overflow用户

发布于 2013-06-05 14:44:57

Debug.WriteLine可能比1毫秒更慢。它没有针对速度进行优化。

您可以添加一个将消息放置到列表中的调用,然后在运行后将该列表写入Debug.WriteLine。您可以添加一个后台任务,将消息发送到Debug.WriteLine。

两者都应该防止计时器错过节拍。

缺少节拍的另一个原因可能是操作系统或另一个程序在两个Debug.WriteLine调用之间执行某些工作。它甚至可能是一台速度很慢的机器。

设置线程优先级或在专用计算机上运行此应用程序应该会有所帮助,但这些类型的计时器问题在Windows上是意料之中的,因为它从未说过这是一个实时操作系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4846153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档