Der Titel ist ziemlich selbsterklärend, ich töte mich über diese Einfachheit.Was entspricht System.nanoTime() in .NET?
Sah here, aber es ist nicht sehr hilfreich.
Der Titel ist ziemlich selbsterklärend, ich töte mich über diese Einfachheit.Was entspricht System.nanoTime() in .NET?
Sah here, aber es ist nicht sehr hilfreich.
Ich denke, dass die Stopwatch Klasse ist, was Sie suchen.
DateTime.Now
gibt Ihnen die aktuelle Zeit in Millisekunden, aber Zeit, die in Nanosekunden genau ist, ist ziemlich inpraktisch, zumindest in Windows.
Ich glaube, die Genauigkeit von DateTime.Now ist ~ 15 oder 20 Millisekunden. Es hat mehr Präzision als Genauigkeit. – snarf
die nächste Sache, die ich finden konnte, ist die DateTime.ToFileTime() -Methode. Sie können wie so diese auf einer Instanz eines Datetime nennen:
long starttime = DateTime.Now.ToFileTime()
Verfahren eine Windows-Dateizeit zurückgibt:
Ein Windows-Datei Es ist ein 64-Bit-Wert, der die Zahl von 100 darstellt -Innosekundenintervalle, die seit Mitternacht der 1. Januar 1601 AD (Coordinated Universal Time, UTC) verstrichen sind.
könnte man zumindest Zeit bis zu 100 ns Intervalle damit verbringen.
src: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx
Dies gibt Ihnen nur 100 ns Genauigkeit für die Zeit der letzten Windows-Timer-Update, die alle 15 bis 16 ms passiert – overstood
ok, nur aus Neugier, woher kommen diese Informationen? –
Ich denke, du wirst die harten Grenzen des OS treffen, wenn Sie in Nanosekunden Zeit sind. Hier ist ein guter Artikel zum Thema:
http://www.lochan.org/2005/keith-cl/useful/win32time.html
Während Windows glücklich 100 ns Genauigkeit zurückkehren wird, wird die Uhr nur einmal alle 15,6 Millisekunden aktualisiert werden garantiert oder so. Daher gibt Windows die Zeit zurück, zu der diese Aktualisierungen auf 100 Nanosekunden genau durchgeführt wurden. Für mehr Genauigkeit als dies müssen Sie wahrscheinlich bereit sein, C oder Assembler zu schreiben und zu laufen und embedded OS.
http://msdn.microsoft.com/de-de/library/system.datetime.ticks.aspx
somelike: DateTime.Ticks
DateTime.Now.Ticks
Ich habe versucht, die Antwort auf diese zu finden einige Performance-Tests zu laufen.
DateTime startTime = DateTime.Now;
generatorEntity.PopulateValueList();
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks);
Wenn Sie einen Zeitstempel wollen zwischen verschiedenen Prozessen, verschiedenen Sprachen (Java, C, C#) verglichen werden, unter der GNU/Linux und Windows (Seven mindestens):
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 Fenster:
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, für den Zeitablauf (vs. die absolute Zeit bekommen), Stoppuhr ist es. – orip
Stoppuhr ist definitiv der beste Weg, Dinge in der BCL Zeit zu messen, es ist einfach nicht in Nanosekunden genau. – overstood
@overstood: Ja, die Genauigkeit ist nicht wie bei der nanoTime-Methode auf Nanosekunden beschränkt. :) – Guffa