0 Tage Serie
go / intermediate
Snippet

Messen von Ausführungsgeschwindigkeit und Speicherallokationen mit Benchmarks

Go bietet erstklassige Benchmarking-Dienstprogramme über das 'testing'-Paket. Benchmark-Funktionen müssen mit 'Benchmark' beginnen und '*testing.B' akzeptieren. Der Aufruf von 'ReportAllocs()' gibt Statistiken zur Speicherallokation aus (Bytes/Op und Allocs/Op), was für das Auffinden von Leistungsengpässen entscheidend ist.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import (
"bytes"
"testing"
)
func ConcatenateWithBuffer(n int) string {
var buf bytes.Buffer
for i := 0; i < n; i++ {
buf.WriteString("go")
}
return buf.String()
}
func BenchmarkConcatenateWithBuffer(b *testing.B) {
b.ReportAllocs()
for i := 0; i < b.N; i++ {
ConcatenateWithBuffer(1000)
}
}
Erklärung
1
func BenchmarkConcatenateWithBuffer(b *testing.B) {
Definiert eine Benchmark-Funktion. Der Runner führt diese Funktion mehrmals mit steigenden b.N-Werten aus.
2
b.ReportAllocs()
Weist das Benchmark-Tool an, Speicherallokationen für die Durchläufe zu messen und auszugeben.
3
for i := 0; i < b.N; i++ {
Führt den zu testenden Codeblock b.N-mal aus. Dieser Wert wird dynamisch angepasst, um eine stabile Messzeit zu erhalten.