Поле testing.B.N
Поле N структуры testing.B задает количество итераций,
которые будет выполнены в бенчмарке. Это поле устанавливается
фреймворком автоматически перед запуском бенчмарка на основе
времени выполнения каждой итерации и значения флага -benchtime.
Внутри бенчмарка поле N используется для цикла, который
выполняет измеряемый код.
Синтаксис
b.N
Поле N имеет тип int и доступно только для чтения.
Оно используется внутри бенчмарк-функций для управления
количеством повторений измеряемого кода.
Пример
Давайте создадим простой бенчмарк, который измеряет время выполнения операции сложения:
package main
import (
"fmt"
"testing"
)
func BenchmarkAddition(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = 1 + 1
}
}
func main() {
br := testing.Benchmark(BenchmarkAddition)
fmt.Printf("N: %d\n", br.N)
fmt.Printf("Time per op: %s\n", br.T)
}
Результат выполнения кода:
"N: 1000000000"
"Time per op: 285.5 ns/op"
Пример
Бенчмарк для проверки конкатенации строк с использованием
поля N для управления итерациями:
package main
import (
"fmt"
"testing"
)
func BenchmarkConcat(b *testing.B) {
for i := 0; i < b.N; i++ {
s := "Hello" + "World"
_ = s
}
}
func main() {
res := testing.Benchmark(BenchmarkConcat)
fmt.Printf("N: %d\n", res.N)
fmt.Printf("Time per op: %s\n", res.T)
}
Результат выполнения кода:
"N: 1000000000"
"Time per op: 267.1 ns/op"
Пример
Более сложный пример с функцией, которая использует
поле N для перебора элементов слайса:
package main
import (
"fmt"
"testing"
)
func sumSlice(s []int) int {
total := 0
for _, v := range s {
total += v
}
return total
}
func BenchmarkSumSlice(b *testing.B) {
data := []int{1, 2, 3, 4, 5}
for i := 0; i < b.N; i++ {
_ = sumSlice(data)
}
}
func main() {
res := testing.Benchmark(BenchmarkSumSlice)
fmt.Printf("N: %d\n", res.N)
fmt.Printf("Time per op: %s\n", res.T)
}
Результат выполнения кода:
"N: 50308672"
"Time per op: 31.54 ns/op"
Смотрите также
-
тип
testing.B,
представляющий бенчмарк -
функцию
testing.B.ResetTimer,
которая сбрасывает таймер бенчмарка -
функцию
testing.B.StartTimer,
которая запускает таймер бенчмарка -
функцию
testing.B.StopTimer,
которая останавливает таймер бенчмарка