在.NET中,相当于System.nanoTime()的是什么?

22

标题已经很清楚了,我正在为这种简单的事情烦恼。

这里看过了,但并没有什么帮助。

7个回答

29

我认为秒表类是你要找的。


+1,对于计时(与获取绝对时间相比),秒表是最好的选择。 - orip
2
秒表绝对是BCL中计时的最佳方式,只是不精确到纳秒。 - overstood
4
是的,准确性并不到纳秒级别,就像nanoTime方法一样。 :) - Guffa

15
如果您想在不同的进程、不同的语言(Java、C、C#)以及GNU/Linux和Windows(至少是Seven)下比较时间戳,请参考以下内容:
Java:
java.lang.System.nanoTime();

C GNU/Linux:

static int64_t hpms_nano() {
   struct timespec t;
   clock_gettime( CLOCK_MONOTONIC, &t );
   int64_t nano = t.tv_sec;
   nano *= 1000;
   nano *= 1000;
   nano *= 1000;
   nano += t.tv_nsec;
   return nano;
}

C Windows:

static int64_t hpms_nano() {
   static LARGE_INTEGER ticksPerSecond;
   if( ticksPerSecond.QuadPart == 0 ) {
      QueryPerformanceFrequency( &ticksPerSecond );
   }
   LARGE_INTEGER ticks;
   QueryPerformanceCounter( &ticks );
   uint64_t nano = ( 1000*1000*10UL * ticks.QuadPart ) / ticksPerSecond.QuadPart;
   nano *= 100UL;
   return nano;
}

C#:

private static long nanoTime() {
   long nano = 10000L * Stopwatch.GetTimestamp();
   nano /= TimeSpan.TicksPerMillisecond;
   nano *= 100L;
   return nano;
}

1

DateTime.Now.Ticks

我试图找到答案以运行一些性能测试。

DateTime startTime = DateTime.Now;
generatorEntity.PopulateValueList();
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks);

1

我能找到的最接近的方法是DateTime.ToFileTime()。您可以在DateTime实例上调用它,如下所示:

long starttime = DateTime.Now.ToFileTime()

该方法返回一个Windows文件时间:

Windows文件时间是一个64位的值,表示自1601年1月1日午夜12:00(协调世界时(UTC))以来经过的100纳秒间隔数。

你可以使用它至少计时到100纳秒间隔。

来源:http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx


1
这只能为您提供上一次 Windows 计时器更新的时间精度,精度为 100 纳秒,每 15 到 16 毫秒进行一次更新。 - overstood

1

DateTime.Now 会给你当前的时间(以毫秒为单位),但是精确到纳秒的时间在Windows系统中相当不切实际。


2
我相信DateTime.Now的准确度约为15或20毫秒。它比准确更精确。 - snarf


0

如果你在以纳秒为单位计时,我认为你将会触及操作系统的硬性限制。这里有一篇关于这个主题的好文章:

http://www.lochan.org/2005/keith-cl/useful/win32time.html

尽管Windows可以愉快地返回100纳秒的精度,但时钟只保证每15.6毫秒左右更新一次。因此,Windows有效地以发生这些更新的时间返回时间,精度为100纳秒。如果您需要比这更高的精度,您可能需要准备编写C或汇编语言,并运行嵌入式操作系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接