Maison >développement back-end >Golang >Qu'est-ce qui est le plus rapide : l'ajout de tranches ou l'affectation directe dans Golang ?

Qu'est-ce qui est le plus rapide : l'ajout de tranches ou l'affectation directe dans Golang ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 02:34:02612parcourir

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

Comparaison des performances de l'ajout et de l'attribution de tranches dans Golang

Dans Golang, il existe deux manières courantes d'ajouter des éléments à une tranche : en utilisant le ajouter une fonction ou attribuer directement des valeurs aux indices de tranche. Pour comprendre les différences de performances entre ces méthodes, considérons le code suivant :

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 du benchmark montrent que a[i] = i surpasse considérablement a = append(a, i) en termes de temps d'exécution :

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

Raison de la différence de performances

La différence de performances provient des opérations sous-jacentes effectuées par chaque méthode. a[i] = i attribue simplement la valeur i au ième élément de la tranche, ce qui est une opération simple et efficace.

En revanche, a = append(a, i) implique un processus plus complexe :

  1. La fonction append() crée une nouvelle tranche avec une taille supérieure à la tranche actuelle a.
  2. Elle copie les éléments de a dans la nouvelle tranche.
  3. Il attribue la valeur i au dernier élément de la nouvelle tranche.
  4. La nouvelle tranche est renvoyée et affectée à la variable a.

Ceci une copie et une allocation supplémentaires contribuent à la surcharge de performances de la méthode append, ce qui entraîne un temps d'exécution plus lent par rapport à la méthode directe. affectation.

Conclusion

Pour ajouter des éléments à une tranche, a[i] = i est une option plus efficace que a = append(a, i) en raison de son fonctionnement est plus simple et plus rapide. Gardez cela à l'esprit lors de l'optimisation des performances du code pour les tâches de manipulation de tranches.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn