CodeBlanks Logo Icon CodeBlanks

b.ResetTimer

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

main.go
package main

import (
    "fmt"
    "testing"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
veri := hazirla()
b.____()
for i := 0; i < b.N; i++ {
    isle(veri)
}
Cevap
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

Orta seviye bölümündeki tüm dersler