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 mainimport ("bytes""testing")func ConcatenateWithBuffer(n int) string {var buf bytes.Bufferfor 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.