Comparaison des performances de l'ajout et de l'affectation de tranches dans Go
Dans Go, le découpage joue un rôle important dans la gestion efficace des données. Cependant, des questions se posent concernant les différences de performances entre deux opérations de tranche couramment utilisées : l'ajout et l'affectation.
Append vs. Assign
L'opération append() étend la tranche existante avec des éléments supplémentaires, tandis que l'opérateur d'affectation (=), lorsqu'il est appliqué aux tranches, écrase simplement les éléments existants par de nouvelles valeurs.
Performance Analyse
L'analyse comparative du code suivant démontre l'écart de performances :
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 } }
Les résultats de l'analyse comparative indiquent que "a[i] = i" (affectation) surpasse systématiquement "a = append( un, je)" (ajouter) :
BenchmarkSliceAppend 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet 300000000 5.76 ns/op 8 B/op
Explication
La performance plus rapide de "a[i] = i" peut être attribuée à sa nature d'affectation directe. Il attribue simplement la valeur i à l'élément correspondant dans la tranche.
En revanche, "a = append(a, i)" implique une série d'opérations :
Ces des étapes supplémentaires introduisent une surcharge par rapport à l'affectation directe dans "a[i] = i".
Conclusion
Comprendre les différences de performances entre les opérations de tranche est crucial pour optimiser l'efficacité du code. Pour une attribution de valeur simple, "a[i] = i" s'avère être un choix plus efficace. Cependant, lorsque l'expansion de la tranche est nécessaire, "a = append(a, i)" reste l'approche appropriée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!