Rumah >pembangunan bahagian belakang >Golang >Manakah Lebih Cepat: Slice Append atau Direct Assignment di Golang?

Manakah Lebih Cepat: Slice Append atau Direct Assignment di Golang?

Susan Sarandon
Susan Sarandonasal
2024-11-15 02:34:02612semak imbas

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

Perbandingan Prestasi tambahkan kepingan dan tetapkan dalam Golang

Di Golang, terdapat dua cara biasa untuk menambahkan elemen pada kepingan: menggunakan tambah fungsi atau memberikan nilai secara langsung kepada indeks hirisan. Untuk memahami perbezaan prestasi antara kaedah ini, pertimbangkan kod berikut:

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
    }
}

Hasil penanda aras menunjukkan bahawa a[i] = i dengan ketara mengatasi prestasi a = tambah(a, i) dari segi masa pelaksanaan:

BenchmarkSliceAppend-4  200000000                7.87 ns/op            8 B/op          0 allocs/op
BenchmarkSliceSet-4     300000000                5.76 ns/op            8 B/op

Sebab Perbezaan Prestasi

Perbezaan prestasi berpunca daripada operasi asas yang dilakukan oleh setiap kaedah. a[i] = i hanya memberikan nilai i kepada elemen ke-i bagi hirisan, yang merupakan operasi yang mudah dan cekap.

Sebaliknya, a = append(a, i) melibatkan proses yang lebih kompleks:

  1. Fungsi append() mencipta kepingan baharu dengan saiz satu lebih besar daripada kepingan semasa a.
  2. Ia menyalin elemen daripada a ke dalam kepingan baharu.
  3. Ia memberikan nilai i kepada elemen terakhir kepingan baharu.
  4. Kepingan baharu dikembalikan dan diberikan kepada pembolehubah a.

Penyalinan dan peruntukan tambahan ini menyumbang kepada overhed prestasi kaedah tambahan, menyebabkan masa pelaksanaan yang lebih perlahan berbanding langsung tugasan.

Kesimpulan

Untuk menambahkan elemen pada kepingan, a[i] = i ialah pilihan yang lebih cekap daripada a = append(a, i) kerana operasinya yang lebih mudah dan pantas. Ingat perkara ini apabila mengoptimumkan prestasi kod untuk tugasan manipulasi kepingan.

Atas ialah kandungan terperinci Manakah Lebih Cepat: Slice Append atau Direct Assignment di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn