Что эквивалентно System.nanoTime() в .NET?

Название в значительной степени самоочевидно, я убиваю себя за эту простоту.

Посмотрел здесь, но это не очень полезно.

Ответы

Ответ 1

Я думаю, что класс Stopwatch - это то, что вы ищете.

Ответ 3

Если вы хотите сравнить временную метку между различными процессами, разными языками (Java, 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;
}

С#:

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

Ответ 4

DateTime.Now предоставит вам текущее время в миллисекундах, но время, точное с точностью до наносекунд, нецелесообразно, по крайней мере, в Windows.

Ответ 5

ближайшей вещью, которую я смог найти, является метод DateTime.ToFileTime(). вы можете вызвать это в экземпляре DateTime, например:

long starttime = DateTime.Now.ToFileTime()

Метод возвращает время файла Windows:

Время файла Windows - это 64-битное значение, которое представляет число интервалов в 100 нс, прошедших с 12:00 до полудня, 1 января 1601 г. A.D. (C.E.). Скоординированное универсальное время (UTC).

вы могли бы по крайней мере с интервалом до 100 нс с ним.

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

Ответ 6

DateTime.Now.Ticks

Я пытался найти ответ на этот вопрос, чтобы выполнить некоторое тестирование производительности.

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

Ответ 7

Я думаю, что вы столкнетесь с жесткими ограничениями ОС, если у вас время в наносекундах. Вот хорошая статья по теме:

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

В то время как Windows с радостью вернет точность в 100 наносекунд, часы могут обновляться только каждые 15,6 миллисекунды или около того. Таким образом, эффективно Windows возвращает время, в которое эти обновления происходили до 100 наносекундной точности. Для большей точности, чем это, вы, вероятно, должны быть готовы написать C или ассемблер и запустить и встроенную ОС.