2012-04-06 4 views
5

Ich versuche Go-Paket "Zeit" zu verwenden, um eine Funktion in meinem Programm zu benchmarken. Suchst du herum, und die Leute scheinen Zeit zu nutzen.NanoSeconds() - aber ich denke diese Funktion ist nicht mehr im Zeitpaket enthalten?Benchmark-Code mit einem StopWatch oder ähnlichem

Was ich brauche ist eine einfache Möglichkeit, einen Timer zu starten und zu stoppen, und den Wert auszudrucken.

+0

Ich glaube, dass Funktion jetzt gleich ist time.Now(). UnixNano() '. – Ashe

Antwort

9

Verwenden Sie die vorhandenen Funktionen des testing Paket in Ihrem * _test.go:

func BenchmarkMyFunc(b *testing.B) { 
    for i := 0; i < b.N; i++ { 
     myBecnhmarkedFunction() 
    } 
} 

und rufen go test -bench RE (RE ein regexp ist die Bänke zu wählen, wie B wie es *B* bedeutet) in der Regel in der Verpackung/Tool-Verzeichnis

Oder explizit von jedem Ort in Ihrem Code - verwenden Sie die Benchmark Funktion.

+1

Danke für die Antwort! Kurz bevor ich deine Antwort gelesen habe, habe ich ein einfaches Beispiel dafür gefunden, wie ich Gos Zeitpaket nutzen konnte, was ziemlich viel für mich war. Ich werde auch auf die Benchmarking-Funktion schauen. 't0: = time.Now() teurlyCall() t1: = time.Now() fmt.Printf (" Der Aufruf hat% v verwendet. \ N ", t1.Sub (t0))' – shaz

+1

Dieser Ansatz ist OK/gut/präzise genug nur für 'teurCall()' Ausführen lang genug, wie in Größenordnungen mal länger als die Maschinenzeit Auflösung ist. Das Testpaket kann nanosekundengenaue Timings verarbeiten, indem es den b.N-Parameter adaptiv ändert. – zzzz

+0

@shaz Sie könnten auch time.Since verwenden: t0: = time.Now(); teuren Anruf(); println ("Zeit:", time.Since (t0)) – BurntSushi5

Verwandte Themen