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

标题几乎是不言自明的,我正在为这种简单而自杀。

看着这里 ,但没什么用处。

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

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

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

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

我能找到的最接近的东西是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

DateTime.Now.Ticks

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

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

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

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

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