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
Freigeben: 2024-11-15 02:34:02
Original
619 Leute haben es durchsucht

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
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage