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 < b.N; i++ {
total := 0
for j := 0; j <= 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]