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:
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!