Właśnie widziałem this question, gdzie jedna z odpowiedzi wskazuje, że System.Diagnostics.Stopwatch powinien być używany tylko do diagnozowania wydajności, a nie w kodzie produkcyjnym.Precyzyjna synchronizacja w .NET
W takim przypadku, jaki byłby najlepszy sposób uzyskania precyzji taktowania w .NET? Obecnie jestem na wczesnym etapie budowania bardzo prostego sekwencera MIDI przy użyciu funkcji MIDI-out z NAudio. Chciałbym móc wysyłać komunikaty MIDI wyrównane do (powiedzmy) 1/10 z jak najmniejszym jitterem. Czy to możliwe, czy też takie zmiany, jak zmiana kontekstu, zrujnują mi dzień?
Obecnie mam trochę kodu w aplikacji konsolowej, która ciągle dzwoni pod numer Stopwatch
i oblicza jitter podczas generowania strumienia 1/16 nut przy 150 obr./min. W tej sytuacji fluktuacja jest bardzo niska. Jednak przeniesię to do innego wątku, więc nie wiem, czy to pozostanie.
+1. Liczniki wydajności zapewniają najbardziej precyzyjny i najlżejszy licznik, jaki możesz znaleźć. To po prostu nie jest tak proste, jak inne implementacje. –
Z tego co rozumiem, Stoper używa QueryPerformanceCounter, jeśli jest dostępny. Nie mam nic przeciwko QPC i użyłem go wcześniej w aplikacjach C++/Win32, jednak nie wiem, co dzieje się na niższych poziomach CLR, więc zastanawiałem się, czy istnieje lepszy sposób. – geofftnz
Masz rację, Stoper używa QueryPerformanceCounter - nie zdawałem sobie sprawy. Po przeczytaniu drugiego pytania, myślę, że jedynym powodem, dla którego ktoś zalecił użycie stopera w produkcji, było to, że niesie ze sobą pewne obciążenie, ale wyobrażam sobie, że jest to dość małe i łatwe do zmierzenia. – RichieHindle