b.ResetTimer
- Go kursu
- Orta seviye
- Ders 48/80
- 4 dk
Hazırlık süresini hariç tutmak için b.ResetTimer öğrenirsin.
b.ResetTimer
Ölçümden önce pahalı bir hazırlık (büyük veri oluşturma, dosya okuma) varsa bu süre sonuca karışır. b.ResetTimer() o ana kadar geçen süreyi ve ayırmaları sıfırlar:
func BenchmarkSirala(b *testing.B) {
veri := rastgeleDilim(100_000) // ölçülmemeli
b.ResetTimer()
for i := 0; i < b.N; i++ {
kopya := slices.Clone(veri)
slices.Sort(kopya)
}
}Neden kopya sıraladık?
İlk tekrarda dilim sıralanırsa sonraki tekrarlar zaten sıralı veriyle çalışır ve çok daha hızlı görünür. Benchmark'ın her tekrarı aynı işi yapmalıdır; bu yüzden her seferinde kopya sıralanır. Kopyalama maliyeti de sonuca girer; bu adil bir karşılaştırma için genellikle kabul edilir ya da ayrı bir benchmark'la ölçülüp çıkarılır.
Uygulama Hazırlık sonrası ölçüm
testing.Benchmark içinde önce 1000 elemanlı bir dilim hazırla, b.ResetTimer() çağır, sonra döngüde dilimin toplamını hesapla ve sink'e ata. sink'in 499500 olduğunu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"testing"
)
var sink int
func main() {
testing.Benchmark(func(b *testing.B) {
veri := make([]int, 1000)
for i := range veri {
veri[i] = i
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
t := 0
for _, v := range veri {
t += v
}
sink = t
}
})
fmt.Println(sink == 499500)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Döngü içinde her tekrarda yapılması gereken ama ölçülmemesi gereken iş için ne kullanılır?
- b.Skip()
- time.Sleep
- b.StopTimer() ve b.StartTimer() Doğru cevap
- b.ResetTimer() her tekrarda
Açıklama: StopTimer/StartTimer ölçümü geçici olarak durdurur; ama çok sık çağrılırlarsa kendi maliyetleri sonucu bozar.
2 Hazırlığı ölçme
veri := hazirla()
b.____()
for i := 0; i < b.N; i++ {
isle(veri)
}
veri := hazirla()
b.ResetTimer()
for i := 0; i < b.N; i++ {
isle(veri)
}
Açıklama: ResetTimer hazırlık süresini ölçümden çıkarır.
3 Zamanlayıcı yöntemi
| Kavram | Anlamı |
|---|---|
ResetTimer |
Şimdiye kadarını sıfırla |
StopTimer |
Ölçümü duraklat |
StartTimer |
Ölçümü sürdür |
b.Loop() |
Go 1.24 otomatik |