Leistungsvergleich von Slice-Anhängen und Zuweisen in Golang
In Golang gibt es zwei gängige Möglichkeiten, Elemente an ein Slice anzuhängen: mit der Append-Funktion oder direktes Zuweisen von Werten zu Slice-Indizes. Um die Leistungsunterschiede zwischen diesen Methoden zu verstehen, betrachten Sie den folgenden Code:
func BenchmarkSliceAppend(b *testing.B) { a := make([]int, 0, b.N) for i := 0; i < b.N; i++ { a = append(a, i) } } func BenchmarkSliceSet(b *testing.B) { a := make([]int, b.N) for i := 0; i < b.N; i++ { a[i] = i } }
Benchmark-Ergebnisse zeigen, dass a[i] = i a = append(a, i) in Bezug auf die Ausführungszeit deutlich übertrifft:
BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op
Grund für Leistungsunterschiede
Der Leistungsunterschied ergibt sich aus den zugrunde liegenden Vorgängen, die von jedem ausgeführt werden Methode. a[i] = i weist einfach den Wert i dem i-ten Element des Slice zu, was eine unkomplizierte und effiziente Operation ist.
Im Gegensatz dazu umfasst a = append(a, i) einen komplexeren Prozess:
Dies Zusätzliches Kopieren und Zuweisen trägt zum Leistungsaufwand der Append-Methode bei, was zu einer langsameren Ausführungszeit im Vergleich zur direkten Methode führt Zuweisung.
Fazit
Zum Anhängen von Elementen an ein Slice ist a[i] = i eine effizientere Option als a = append(a, i) aufgrund von seine einfachere und schnellere Bedienung. Beachten Sie dies, wenn Sie die Codeleistung für Slice-Manipulationsaufgaben optimieren.
Das obige ist der detaillierte Inhalt vonWas ist schneller: Slice Append oder direkte Zuweisung in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!