2008-10-02 31 views

Odpowiedz

48

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.

18

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.

+0

Tak, ten zlicza znaczniki na zegarze wysokiej rozdzielczości (jeśli jest obecny) ... Dokładnie to, czego potrzebuję. –

1

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 
); 

QueryPerformanceCounter @ MSDN

6

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())); 
+9

Klasa Stopwatch robi to za Ciebie od wersji .NET 2.0. –

Powiązane problemy