GO · 테스트
벤치마크 심화
testing.B로 함수 성능을 측정합니다. 메모리 할당량과 알고리즘 비교에 사용됩니다.
테스트중급benchmarkperformancebenchmemtesting
핵심 설명
testing.B로 함수 성능을 측정합니다. 메모리 할당량과 알고리즘 비교에 사용됩니다.
Go code
package main
import (
"fmt"
"strings"
"testing"
)
// 문자열 연결 벤치마크 비교
func BenchmarkConcat(b *testing.B) {
b.Run("Plus", func(b *testing.B) {
for i := 0; i < b.N; i++ {
s := ""
for j := 0; j < 100; j++ {
s += "x"
}
}
})
b.Run("Builder", func(b *testing.B) {
for i := 0; i < b.N; i++ {
var sb strings.Builder
for j := 0; j < 100; j++ {
sb.WriteString("x")
}
_ = sb.String()
}
})
b.Run("Join", func(b *testing.B) {
parts := make([]string, 100)
for i := range parts { parts[i] = "x" }
b.ResetTimer() // 준비 시간 제외
for i := 0; i < b.N; i++ {
_ = strings.Join(parts, "")
}
})
}
func main() {
// go test -bench=. -benchmem -count=5
fmt.Println("벤치마크: go test -bench=BenchmarkConcat -benchmem")
}학습 팁
-benchmem 플래그로 할당 횟수와 크기를 확인하세요. b.ReportAllocs()도 동일한 효과입니다.
주의할 점
벤치마크 루프 밖에서 데이터를 준비하면 준비 시간이 포함됩니다. b.ResetTimer()로 타이머를 초기화하세요.
자주 묻는 질문
벤치마크 심화란 무엇인가요?
testing.B 로 함수 성능을 측정합니다. 메모리 할당량과 알고리즘 비교에 사용됩니다.
벤치마크 심화 학습 시 주의할 점은 무엇인가요?
벤치마크 루프 밖에서 데이터를 준비하면 준비 시간이 포함됩니다. b.ResetTimer() 로 타이머를 초기화하세요.