2012-04-06 64 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