РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
966 of 1593 menu

Тип testing.B

Тип testing.B используется для написания бенчмарков в пакете testing. Он передается в функции бенчмарков вторым параметром и предоставляет методы для управления замерами производительности. Основное поле N определяет количество итераций, которое будет выполнено для получения стабильных результатов.

Бенчмарки в Go имеют особый синтаксис: они всегда начинаются со слова Benchmark и принимают указатель на testing.B. Запускаются они командой go test -bench.

Синтаксис

func BenchmarkXxx(b *testing.B) { for i := 0; i < b.N; i++ { // Код для измерения } }

Пример базового бенчмарка

Напишем бенчмарк для функции, которая конкатенирует строки через оператор +:

package main import ( "testing" ) func concat(a, b string) string { return a + b } func BenchmarkConcat(b *testing.B) { for i := 0; i < b.N; i++ { concat("hello", "world") } }

Результат выполнения команды:

"BenchmarkConcat-8 1000000000 0.2456 ns/op"

Пример с сбросом таймера

Если в бенчмарке требуется выполнить подготовительные действия, которые не должны влиять на измерения, используется метод ResetTimer:

package main import ( "testing" ) func BenchmarkWithSetup(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 } } }

Пример с остановкой таймера

Метод StopTimer позволяет приостановить замер времени на время выполнения ресурсоемких операций, которые не должны учитываться в результате:

package main import ( "testing" ) func BenchmarkStopTimer(b *testing.B) { for i := 0; i < b.N; i++ { b.StopTimer() // Имитация тяжелой подготовки _ = make([]byte, 1024) b.StartTimer() // Измеряемый код _ = i * i } }

Пример с отчетом об аллокациях

Метод ReportAllocs включает отчет о выделениях памяти в результатах бенчмарка:

package main import ( "testing" ) func BenchmarkAllocs(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { s := make([]int, 10) for j := 0; j < len(s); j++ { s[j] = j } } }

Результат выполнения команды:

"BenchmarkAllocs-8 10000000 125 ns/op 80 B/op 1 allocs/op"

Смотрите также

  • тип testing.T,
    который используется для написания обычных тестов
  • метод testing.B.ResetTimer,
    который сбрасывает таймер бенчмарка
  • метод testing.B.ReportAllocs,
    который включает отчет об аллокациях
  • метод testing.B.Run,
    который запускает вложенные бенчмарки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить