Leistungsvergleich von Slice-Anhang und -Zuweisung in Go
In Go spielt Slicing eine wichtige Rolle bei der effizienten Datenverwaltung. Es stellen sich jedoch Fragen zu den Leistungsunterschieden zwischen zwei häufig verwendeten Slice-Operationen: Anhängen und Zuweisen.
Anhängen vs. Zuweisen
Die Operation append() erweitert das vorhandene Slice mit zusätzlichen Elementen, während der Zuweisungsoperator (=) bei Anwendung auf Slices einfach die vorhandenen Elemente mit neuen Werten überschreibt.
Leistungsanalyse
Benchmarking des folgenden Codes zeigt die Leistungslücke:
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“ (Zuweisung) „a = append(a, i)“ (anhängen) durchweg übertrifft:
BenchmarkSliceAppend 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet 300000000 5.76 ns/op 8 B/op
Erklärung
Die schnellere Leistung von „a[i] = i“ kann auf die direkte Zuweisung zurückgeführt werden. Es weist einfach den Wert i dem entsprechenden Element im Slice zu.
Im Gegensatz dazu umfasst „a = append(a, i)“ eine Reihe von Operationen:
Diese zusätzlichen Schritte führen im Vergleich zur direkten Zuweisung in „a[i] = i“ zu einem Mehraufwand ".
Fazit
Das Verständnis der Leistungsunterschiede zwischen Slice-Operationen ist entscheidend für die Optimierung der Codeeffizienz. Für eine einfache Wertzuweisung erweist sich „a[i] = i“ als effizientere Wahl. Wenn jedoch eine Erweiterung des Slice erforderlich ist, bleibt „a = append(a, i)“ der geeignete Ansatz.
Das obige ist der detaillierte Inhalt vonWas ist in Go schneller: „append()' oder Slice-Zuweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!