2012-04-06 35 views
5

我正在嘗試使用Go軟件包「時間」來對我的程序中的函數進行基準測試。一直在四處搜索,而人們似乎使用time.NanoSeconds() - 但我認爲這個函數已經不在時間包中了?使用StopWatch或類似的基準測試代碼

我需要的是啓動和停止計時器,並打印出值的簡單方法。

+0

我相信現在的功能等同於'time.Now()。UnixNano()'。 – Ashe 2012-04-06 22:56:46

回答

9

使用testing包你* _test.go內的現有功能:

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

,並調用go test -bench RE(RE是一個正則表達式來選擇長椅,像B因爲它意味着*B*)通常在包裝內/工具目錄

或明確從代碼中的任何地方 - 使用Benchmark功能。

+1

感謝您的回答!就在我閱讀你的回覆之前,我發現了一個簡單的例子,說明如何使用Go的時間包,這對我來說已經足夠了。我也將看看基準測試功能。 'T0:= time.Now()expensiveCall()T1:= time.Now()fmt.Printf( 「調用了%V運行\ n」,t1.Sub(T0))' – shaz 2012-04-06 20:04:40

+1

這種方法對於'expensiveCall()'執行足夠長的時間是足夠的/好的/足夠精確的,就像機器時間分辨率的數量級的倍數一樣。測試包可以通過自適應地更改b.N參數來處理納秒精確的定時。 – zzzz 2012-04-06 20:14:16

+0

@shaz你也可以使用time.Since:t0:= time.Now(); expensiveCall(); println(「Time:」,time.Since(t0)) – BurntSushi5 2012-04-06 22:38:10