DateTime.Ticks 没有 100 ns 的分辨率?

Jes*_*sen 5 .net c# visual-studio-2012

可能的重复:
C# DateTime.Now 精度

关于 .NET 中的高分辨率计时,有一些关于 SO 的问题,其中声明(如 MSDN 文档中所述)DateTime.Ticks 的结果为 100 纳秒。

但在现实生活中似乎完全不是这样。如果我运行下面的代码,我希望它生成行,其中每一行的 Tick 值都不同,其中很多行具有相同的毫秒值。但事实并非如此 - 滴答值保持不变,直到下一次毫秒值的变化,不会增加时间戳的分辨率。

private static List<string> GetTimeLine(long iterations)
{
    List<string> liste = new List<string>();
    for (long i = 0; i <= iterations; i++)
    {
        liste.Add(DateTime.Now.Millisecond.ToString() + " - " + DateTime.Now.Ticks.ToString());
    }

    return liste;
}

static void Main(string[] args)
{
    Console.WriteLine("Generating timeline");
    guids = GetTimeLine(10000);
    File.WriteAllLines(@"C:\Test\GUIDS.TXT", guids);
    Console.WriteLine("File written - Press ENTER");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

结果输出示例:

...
867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

868 - 634940160118689616

868 - 634940160118689616

868 - 634940160118689616

...

那么在.NET 中获得超过毫秒分辨率的方法是什么?

Mat*_*son 5

在 C# 中测量经过时间的最准确方法是使用Stopwatch类。

这使用微处理器的性能计数器,通过调用QueryPerformanceCounter 实现

  • 不,这是安排计时器事件的最准确方法,这与简单地测量经过的时间不同!我们正在谈论测量经过的时间,而不是安排事件!我在回答中非常小心地明确说“测量经过的时间”。请参阅 http://support.microsoft.com/kb/172338?wa=wsignin1.0,其中说“当定时代码识别性能瓶颈时,您希望使用系统必须提供的最高分辨率计时器。本文介绍了如何使用 QueryPerformanceCounter 函数为应用程序代码计时。” (5认同)