Метод testing.B.StartTimer
Метод testing.B.StartTimer возобновляет отсчет времени выполнения бенчмарка после того, как он был остановлен методом testing.B.StopTimer. Обычно это используется для того, чтобы исключить время, затраченное на подготовительные операции (например, создание тестовых данных, инициализацию структур), из итогового времени выполнения измеряемого кода. Метод не принимает никаких параметров и не возвращает значений.
Синтаксис
b.StartTimer()
Пример
Рассмотрим пример, в котором мы измеряем производительность функции, но исключаем время на подготовку данных:
package main
import (
"testing"
)
func BenchmarkSum(b *testing.B) {
data := make([]int, 1000)
for i := 0; i < len(data); i++ {
data[i] = i
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
sum := 0
for _, v := range data {
sum += v
}
_ = sum
}
}
Результат выполнения бенчмарка:
"BenchmarkSum-8 100000 12345 ns/op"
Пример
В этом примере мы используем StopTimer и StartTimer для исключения времени на сложную подготовку данных внутри цикла бенчмарка:
package main
import (
"testing"
)
func BenchmarkProcess(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
data := make([]int, 100)
for j := 0; j < len(data); j++ {
data[j] = j * 2
}
b.StartTimer()
result := 0
for _, v := range data {
result += v
}
_ = result
}
}
Результат выполнения бенчмарка:
"BenchmarkProcess-8 50000 24690 ns/op"
Пример
Покажем, как StartTimer можно использовать для измерения только определенной части кода, исключая операции ввода-вывода:
package main
import (
"testing"
)
func BenchmarkCompute(b *testing.B) {
b.StopTimer()
values := []int{1, 2, 3, 4, 5}
b.StartTimer()
for i := 0; i < b.N; i++ {
res := 0
for _, v := range values {
res += v * v
}
_ = res
}
}
Результат выполнения бенчмарка:
"BenchmarkCompute-8 100000000 12.3 ns/op"
Смотрите также
-
метод
testing.B.StopTimer,
который останавливает замер времени выполнения -
метод
testing.B.ResetTimer,
который сбрасывает таймер бенчмарка -
метод
testing.B.ReportAllocs,
который включает отчет об аллокациях памяти -
метод
testing.B.Run,
который запускает вложенные бенчмарки