Heim >Backend-Entwicklung >Golang >Was ist schneller: Slice Append oder direkte Zuweisung in Golang?

Was ist schneller: Slice Append oder direkte Zuweisung in Golang?

Susan Sarandon
Susan SarandonOriginal
2024-11-15 02:34:02612Durchsuche

Which is Faster: Slice Append or Direct Assignment in Golang?

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:

  1. Die Funktion append() erstellt ein neues Slice mit einer um eins größeren Größe als das aktuelle Slice a.
  2. Sie kopiert die Elemente von a in das neue Slice.
  3. Es weist dem letzten Element des neuen Slice den Wert i zu.
  4. Das neue Slice wird zurückgegeben und der Variablen a zugewiesen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn