Golang でのスライスの追加と割り当てのパフォーマンスの比較
Golang では、要素をスライスに追加する一般的な方法が 2 つあります。 append 関数を使用するか、スライス インデックスに値を直接割り当てます。これらのメソッド間のパフォーマンスの違いを理解するには、次のコードを考慮してください。
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 } }
ベンチマークの結果は、実行時間の点で a[i] = i が a = append(a, i) よりも大幅に優れていることを示しています。
BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op
パフォーマンスの違いの理由
パフォーマンスの違いの原因は次のとおりです。各メソッドによって実行される基本的な操作。 a[i] = i は値 i をスライスの i 番目の要素に割り当てるだけであり、簡単で効率的な操作です。
対照的に、a = append(a, i) にはより複雑なプロセスが含まれます。
この追加のコピーと割り当ては、追加メソッドのパフォーマンスのオーバーヘッドに寄与し、直接メソッドと比較して実行時間が遅くなります。 assign.
結論
要素をスライスに追加する場合、a[i] = i は a = append(a, i) よりも効率的なオプションです。操作がより簡単かつ高速になりました。スライス操作タスクのコード パフォーマンスを最適化するときは、この点に留意してください。
以上がGolang でのスライス追加と直接代入はどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。