Tytuł jest dość oczywisty, zabijam się nad tą prostotą.Co to jest odpowiednik System.nanoTime() w .NET?
Wyglądał na here, ale nie jest zbyt pomocny.
Tytuł jest dość oczywisty, zabijam się nad tą prostotą.Co to jest odpowiednik System.nanoTime() w .NET?
Wyglądał na here, ale nie jest zbyt pomocny.
Uważam, że klasa Stopwatch jest tym, czego szukasz.
da ci aktualny czas w milisekundach, ale czas, który jest dokładny do nanosekund, jest dość niepraktyczny, przynajmniej w systemie Windows.
Wierzę, że dokładność DateTime.Now wynosi ~ 15 lub 20 milisekund. Ma większą precyzję niż dokładność. – snarf
Najbliższa rzecz jaką mogłem znaleźć to metoda DateTime.ToFileTime(). można nazwać na przykład z DateTime tak:
long starttime = DateTime.Now.ToFileTime()
Metoda zwraca czasowych plików systemu Windows:
czas plikz systemem Windows jest wartość 64-bitową, która reprezentuje liczbę 100 - przerwy interwałowe, które upłynęły od północy, 1 stycznia 1601 AD (CE) Coordinated Universal Time (UTC).
można przydzielić przynajmniej czas do 100 ns interwałów.
src: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx
To tylko daje 100 ns dokładność na czas ostatniej aktualizacji zegara Windows, co dzieje się co 15 do 16 ms – overstood
ok, tylko z ciekawości, z których informacje pochodzą? –
Chyba masz zamiar uderzyć twarde granice OS jeśli rozrządu w nanosekund. Oto dobry artykuł na ten temat:
http://www.lochan.org/2005/keith-cl/useful/win32time.html
Podczas gdy Windows będzie szczęśliwie powrócić dokładność 100 nanosekund, zegar jest zagwarantowana tylko do aktualizacji raz na 15,6 milisekund lub tak. Tak skutecznie system Windows zwraca czas, w którym te aktualizacje wystąpiły do 100 nanosekundy dokładności. Aby uzyskać większą dokładność niż ta, prawdopodobnie musisz być przygotowany do napisania C lub asemblera oraz uruchomionego i wbudowanego systemu operacyjnego.
http://msdn.microsoft.com/de-de/library/system.datetime.ticks.aspx
somelike: DateTime.Ticks
DateTime.Now.Ticks
starałem się znaleźć odpowiedź na to, aby uruchomić kilka testów wydajności.
DateTime startTime = DateTime.Now;
generatorEntity.PopulateValueList();
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks);
Jeśli chcesz znacznik czasu do porównania pomiędzy różnymi procesami, różnych języków (Java, C, C#), GNU/Linux i Windows (Siedem przynajmniej):
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;
}
+1, z uwagi na czas (w porównaniu z uzyskanie absolutnego czasu), to stoper. – orip
Stoper jest zdecydowanie najlepszym sposobem na odmierzanie czasu w BCL, to nie jest dokładna nanosekunda. – overstood
@overstood: Tak, dokładność nie spada do nanosekund, podobnie jak metoda nanoTime. :) – Guffa