乐稳哥 發表於 2019-6-5 01:13:00

go test benchmark

<h1 id="benchtest的简单使用">Benchtest的简单使用</h1>
<p>一个简单的benchtest用例</p>
<pre><code class="language-go">// 以BenchmarkXXX类似命名,并传入b *testing.B 参数
func BenchmarkLoopSum(b *testing.B) {
    for i := 0; i &lt; b.N; i++ {
      total := 0
      for j := 0; j &lt;= maxLoop; j++ {
            total += j
      }
    }
}
</code></pre>
<p>查看benchtest的参数: go help testflag<br>
-bench grep<br>
通过正则表达式过滤出需要进行benchtest的用例<br>
-count n<br>
跑n次benchmark,n默认为1<br>
-benchmem<br>
打印内存分配的信息<br>
-benchtime=5s<br>
自定义测试时间,默认为1s</p>
<p>测试命令:<code>$ go test --bench=LoopSum my_test.go -benchmem</code><br>
运行结果:</p>
<pre><code class="language-s">goos: windows
goarch: amd64
BenchmarkLoopSum-12         5000            316952 ns/op               0 B/op          0 allocs/op
PASS
ok      command-line-arguments1.939s
</code></pre>
<p>5000表示测试次数,即test.B提供的N, ns/op表示每一个操作耗费多少时间(纳秒)。B/op表示每次调用需要分配16个字节。allocs/op表示每次调用有多少次分配<br>
基准测试框架对一个测试用例的默认测试时间是 1 秒。开始测试时,当以 Benchmark 开头的基准测试用例函数返回时还不到 1 秒,那么 testing.B 中的 N 值将按 1、2、5、10、20、50……递增,同时以递增后的值重新调用基准测试用例函数。</p>
<pre><code class="language-s">$ go test --bench=. my_test.go -benchmem
goos: windows
goarch: amd64
BenchmarkRange-12               100000             20505 ns/op               8 B/op          0 allocs/op
BenchmarkFor-12                  1000000            2054 ns/op               0 B/op          0 allocs/op
BenchmarkLoopSum-12               5000            315755 ns/op               0 B/op          0 allocs/op
BenchmarkLoopRecursion-12            300         4664190 ns/op               0 B/op          0 allocs/op
PASS
ok      command-line-arguments8.792s
</code></pre><br><br>
来源:https://www.cnblogs.com/linyihai/p/10977267.html
頁: [1]
查看完整版本: go test benchmark