.NET system.diagnostics秒表的问题

0 .net c# stopwatch

我正在尝试创建一个结合使用秒表类的应用程序.

Stopwatch sw = new Stopwatch();
sw.Start();
while (play)
{
    long timer = sw.ElapsedMilliseconds;
    Debug.WriteLine(timer);
}
Run Code Online (Sandbox Code Playgroud)

当我测试这个循环并检查经过的时间时,我发现程序丢失了几毫秒.

调试器输出中的一些时钟:

31
32
33
34
35
36
37
38
40 <------ 39错过
41
42
43

关于如何解决这个问题的任何建议?

Yoc*_*mer 5

您丢失的几毫秒是由于您的程序不是唯一在OS上运行的程序.

因此,偶尔会有其他程序获得时间片,并且几分之一毫秒被遗漏.

你无法"修复"它.


Pau*_*sik 5

缺少毫秒?您是否希望每秒钟看到一个条目?例如每秒1000?如果是这样,那将永远不会发生.没有精确到1毫秒的时序API.

除了其他操作系统进程(如任务切换)之外,您在循环中进行分配以及输出流输出这一事实意味着无法实现毫秒精度.您需要一台专用的实时机器来提供您正在寻找的输出类型

  • Windows不是实时操作系统. (5认同)
  • 时间不准确的一个很好的例子是在Silverlight中进行,其精度仅为15ms. (2认同)