Chciałbym zrobić kilka podstawowych profilowania mojego kodu, ale okazało się, że DateTime.Now w C# mają tylko rozdzielczość około 16 ms. Musi być lepszy czas na utrzymywanie konstrukcji, których jeszcze nie znalazłem.Timer o wysokiej rozdzielczości w .NET
Odpowiedz
Oto nieco próbkę kodu do czasu operacji:
Dim sw As New Stopwatch()
sw.Start()
//Insert Code To Time
sw.Stop()
Dim ms As Long = sw.ElapsedMilliseconds
Console.WriteLine("Total Seconds Elapsed: " & ms/1000)
EDYTOWANIE:
I fajne jest to, że może wznowić także.
Stopwatch sw = new Stopwatch();
foreach(MyStuff stuff in _listOfMyStuff)
{
sw.Start();
stuff.DoCoolCalculation();
sw.Stop();
}
Console.WriteLine("Total calculation time: {0}", sw.Elapsed);
Klasa System.Diagnostics.Stopwatch użyje licznika wysokiej rozdzielczości, jeśli jest on dostępny w systemie.
Klasa System.Diagnostics.StopWatch świetnie nadaje się do profilowania.
Oto link do Vance Morrison's Code Timer Blog, jeśli nie chcesz pisać własnych funkcji pomiarowych.
Możesz zadzwonić do licznika wydajności o wysokiej rozdzielczości w systemie Windows. Nazwa funkcji to QueryPerformanceCounter w pliku kernel32.dll.
składni do importowania do C#:
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
Składnia dla wywołania Windows:
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount
);
W przypadku liczników wydajności o najwyższej rozdzielczości można korzystać z podstawowych liczników wydajności Win32.
Dodaj następujący P/Invoke sigs:
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceCounter(out long perfcount);
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceFrequency(out long freq);
I nazywają je za pomocą:
#region Query Performance Counter
/// <summary>
/// Gets the current 'Ticks' on the performance counter
/// </summary>
/// <returns>Long indicating the number of ticks on the performance counter</returns>
public static long QueryPerformanceCounter()
{
long perfcount;
QueryPerformanceCounter(out perfcount);
return perfcount;
}
#endregion
#region Query Performance Frequency
/// <summary>
/// Gets the number of performance counter ticks that occur every second
/// </summary>
/// <returns>The number of performance counter ticks that occur every second</returns>
public static long QueryPerformanceFrequency()
{
long freq;
QueryPerformanceFrequency(out freq);
return freq;
}
#endregion
Dump to wszystko w prosty klasy i jesteś gotowa do pracy. Przykład (zakładając nazwę klasy PerformanceCounters):
long startCount = PerformanceCounter.QueryPerformanceCounter();
// DoStuff();
long stopCount = PerformanceCounter.QueryPerformanceCounter();
long elapsedCount = stopCount - startCount;
double elapsedSeconds = (double)elapsedCount/PerformanceCounter.QueryPerformanceFrequency();
MessageBox.Show(String.Format("Took {0} Seconds", Math.Round(elapsedSeconds, 6).ToString()));
Klasa Stopwatch robi to za Ciebie od wersji .NET 2.0. –
- 1. Znaczniki czcionek o wysokiej rozdzielczości
- 2. Timer o wysokiej wydajności kontra StopWatch
- 3. Wyświetlacze Retina, obrazy tła o wysokiej rozdzielczości
- 4. Zegar o wysokiej rozdzielczości dla iPhone'a?
- 5. Czasomierz ObjC/C/C++ o wysokiej rozdzielczości z oddzwonieniem
- 6. Zdjęcie ekranu o wysokiej rozdzielczości w systemie Android:
- 7. Obraz w wysokiej rozdzielczości IE Browser Rendering
- 8. Obrazowanie w wysokiej rozdzielczości z Androidem
- 9. C# obrazy w wysokiej rozdzielczości w PDF
- 10. timing wysokiej częstotliwości .NET
- 11. Automatyczne przeskalowanie aplikacji na platformie Windows o wysokiej rozdzielczości?
- 12. Jak załadować ikonę App Store na ekrany o wysokiej rozdzielczości?
- 13. Jak korzystać z WinMerge z ustawieniem Windows o wysokiej rozdzielczości?
- 14. setVideoSize() ulega awarii w wysokiej rozdzielczości
- 15. Interfejs API w czasie rzeczywistym/wysokiej rozdzielczości?
- 16. Wysokiej rozdzielczości ikony UITabBar są wyświetlane w pełnym rozmiarze na ekranie o niskiej rozdzielczości
- 17. Zegar wysokiej rozdzielczości z C++ i Linux?
- 18. Przechwytuj wideo/obraz wysokiej rozdzielczości html5
- 19. Jak uzyskać zegar o wysokiej rozdzielczości w natywnym kodzie systemu Android?
- 20. Wykres słupkowy o wysokiej szerokości stosu o wysokiej szerokości geograficznej
- 21. Współrzędne myszy wysokiej rozdzielczości i wysokiej szybkości klatek na sekundę w systemie OSX? (Lub inne rozwiązanie?)
- 22. Jak zrobić zdjęcia w wysokiej rozdzielczości za pomocą funkcji Camera.takePicture()?
- 23. Jak utworzyć zegar o wysokiej rozdzielczości w systemie Linux, aby mierzyć wydajność programu?
- 24. Jak dodać niestandardowy znacznik wysokiej rozdzielczości na statycznej mapie google
- 25. Responsive Web Design i wysokiej rozdzielczości wyświetla iPhone (4/5)
- 26. .Net Limity czasu: WaitForSingleObject vs Timer
- 27. Konwersja czasu zegara wysokiej rozdzielczości na liczbę całkowitą (Chrono)
- 28. Nazwy plików ikon aplikacji o wysokiej rozdzielczości/wyświetlaniu siatkówki dla nowego iPada
- 29. Czy istnieje sposób, aby aplikacje tkinter były większe na wyświetlaczach o wysokiej rozdzielczości?
- 30. Jeśli chodzi o responsywny design, w jaki sposób obchodzić się z telefonami o wysokiej rozdzielczości, takimi jak Galaxy S4?
Tak, ten zlicza znaczniki na zegarze wysokiej rozdzielczości (jeśli jest obecny) ... Dokładnie to, czego potrzebuję. –