什么是.NET中的System.nanoTime()?

时间:2009-10-11 20:53:07

标签: c# java .net nanotime

这个标题几乎是不言自明的,我因这种简单而自杀。

看了here,但没什么用处。

7 个答案:

答案 0 :(得分:25)

我认为Stopwatch课程正是你要找的。

答案 1 :(得分:6)

如果你想在不同的进程,不同的语言(Java,C,C#)之间比较时间戳,在GNU / Linux和Windows下(至少七个):

爪哇:

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;
}

答案 2 :(得分:2)

答案 3 :(得分:1)

DateTime.Now将以毫秒为单位给出当前时间,但精确到纳秒的时间是不切实际的,至少在Windows中是这样。

答案 4 :(得分:1)

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

long starttime = DateTime.Now.ToFileTime()

该方法返回Windows文件时间:

  

Windows文件时间是一个64位值,表示自公元1601年1月1日午夜12点(格林威治标准时间)协调世界时(UTC)以来经过的100纳秒间隔的数量。

你至少可以用100 ns的间隔时间。

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

答案 5 :(得分:1)

DateTime.Now.Ticks

我试图找到答案来进行一些性能测试。

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

答案 6 :(得分:-1)

如果您的计时时间为纳秒,我认为您将达到操作系统的硬限制。这是一篇关于这个主题的好文章:

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

虽然Windows很乐意返回100纳秒的精度,但时钟只保证每15.6毫秒左右更新一次。因此,Windows有效地将这些更新发生的时间返回到100纳秒的准确度。为了比这更准确,您可能需要准备编写C或汇编程序并运行和嵌入式操作系统。