【问题标题】:DateTime.Ticks does NOT have a resolution af 100 ns? [duplicate]DateTime.Ticks 没有 100 ns 的分辨率? [复制]
【发布时间】:2013-01-17 10:09:58
【问题描述】:

可能重复:
C# DateTime.Now precision

关于 .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();
}

结果输出示例:

...
867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

867 - 634940160118679615

868 - 634940160118689616

868 - 634940160118689616

868 - 634940160118689616

...

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

【问题讨论】:

标签: c# .net visual-studio-2012


【解决方案1】:

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

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

【讨论】:

  • 不,在 C# 中测量经过时间的最准确方法是多媒体计时器。正如lazyberezovsky 之前的回答中所述。
  • 不,这是安排计时器事件的最准确方法,这与简单地测量经过的时间不同!我们谈论的是测量经过的时间,而不是安排事件!我非常小心地在回答中明确地说“测量经过的时间”。请参阅support.microsoft.com/kb/172338?wa=wsignin1.0,其中说“在对代码进行计时以识别性能瓶颈时,您希望使用系统必须提供的最高分辨率计时器。本文介绍了如何使用 QueryPerformanceCounter 函数对应用程序代码计时。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多