초기 설정 작업이 긴 경우
func BenchmarkFoo1(b *testing.B) {
expensiveSetup() // 초기 설정 작업
b.ResetTimer() // 벤치마크 타이머를 재설정함
for i := 0; i < b.N; i++ {
functionUnderTest()
}
}
ResetTimer()
그렇다면 다음과 같이 긴 초기 설정 작업이 한 번이 아니라 루프 안에서 매번 수행된다면?
func BenchmarkFoo2(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer() // 벤치마크 타이머를 일시 정지함
expensiveSetup()
b.StartTimer() // 벤치마크 타이머를 다시 이어서 실행
functionUnderTest()
}
}
마이크로 벤치마크: 매우 작은 연산 단위로 측정하는 벤치마크, 결론을 잘못 내리기 쉬움
마이크로 벤치마크에서는 결과에 영향을 미치는 요인이 많음
대안
-benchtime
옵션을 이용해 벤치마크 시간을 늘리는 것
benchstat
: 벤치마크 실행에 대한 통계를 계산하고 비교하는 기능을 제공