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

hkmswyz6  于 2023-04-04  发布在  Java
关注(0)|答案(7)|浏览(142)

标题是非常不言自明的,我杀了自己在这个简单。
看了这里,但没有多大帮助。

mtb9vblg

mtb9vblg1#

我认为Stopwatch类是你正在寻找的。

daolsyd0

daolsyd02#

如果你想在GNU/Linux和Windows(至少七个)下的不同进程、不同语言(Java、C、C#)之间比较时间戳:
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;
}
yhxst69z

yhxst69z3#

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

syqv5f0l

syqv5f0l4#

我能找到的最接近的方法是DateTime.ToFileTime()方法。你可以像这样在DateTime的示例上调用它:

long starttime = DateTime.Now.ToFileTime()

该方法返回Windows文件时间:
Windows文件时间是一个64位值,表示自1601年1月1日午夜12:00起经过的100纳秒间隔数。
你至少可以用它把时间缩短到100纳秒。
邮箱:http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx

liwlm1x9

liwlm1x95#

DateTime.Now.Ticks
我试图找到这个问题的答案来运行一些性能测试。

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

ctzwtxfj6#

我认为如果你以纳秒为单位计时,你将触及操作系统的硬极限。这里有一篇关于这个主题的好文章:
http://www.lochan.org/2005/keith-cl/useful/win32time.html
虽然Windows很乐意返回100纳秒的精度,但时钟只能保证每15.6毫秒左右更新一次。因此,实际上Windows返回的更新时间为100纳秒精度。要获得更高的精度,您可能需要准备编写C或汇编程序并运行嵌入式操作系统。

相关问题