j’ai eu quelques commentaires sur un récent article de comparaison des performances qui ont été bien reçus et m’ont encouragé à écrire un peu plus Donc, sans plus tarder, commençons à regarder l’ajout d’éléments à un tableau et quelle approche serait la meilleure en termes de performances.
En règle générale, l’approche la plus courante que je vois avec l’ajout d’éléments à un tableau dans PowerShell consiste à utiliser l’opérateur+=.,
$a = @()$a += 'data'$a$a += 'test'$a
j’ai d’abord dû initialiser le tableau, sinon mes tentatives d’ajouter le texte seraient plutôt traitées comme du texte concaténant, ce qui n’est pas ce que je recherche dans cet exemple. Comme je l’ai dit, c’est l’approche commune que je vois, mais est-il nécessairement l’approche plus rapide? Eh bien, la réponse est non.
utilisation d’une ArrayList
la réponse à de meilleures performances réside dans l’utilisation d’une ArrayList. Comme vous pouvez le voir de plus en plus à obtenir de meilleures performances de PowerShell, vous verrez généralement un mouvement vers l’utilisation de certains .,Instances Net pour effectuer des opérations similaires pouvant être effectuées à l’aide de commandes ou d’opérateurs PowerShell réels. Donc, quelque chose que j’ai fait ci-dessus peut être fait comme suit:
$a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a
Les 0 et 1 que vous voyez être sortis chaque fois que j’ajoute un élément indique l’index dont l’élément a été ajouté dans la collection. Donc, « données », a été ajoutée à l’indice 0 et ‘test’ a été ajouté le 1 de l’index. Cela peut être assez ennuyeux à mon avis et peut polluer le pipeline et apporter des résultats indésirables. Vous pouvez contourner ce problème en vous assurant que les données sont envoyées à un emplacement Null.,
Nous avons deux options pour créer une collection d’éléments configurés devant nous, mais la question suivante est de savoir lequel est le plus rapide? Voyons!
Je ne dis pas que ArrayList a gagné à chaque fois wait attendez, je dis ça! À mesure que le nombre total d’articles ajoutés à chaque collection augmentait, le temps augmentait également pour chacune des approches, le += augmentant de façon assez spectaculaire vers la fin. Ce qui se passe avec l’opérateur+=, c’est qu’il construit en fait un nouveau tableau chaque fois que vous utilisez l’opérateur afin qu’il puisse ajouter le nouvel élément à la collection., Pas vraiment efficace, mais il fait le travail. Vous ne trouverez pas cela avec L’approche ArrayList car elle ajoute l’élément directement dans la collection.
comme avec n’importe lequel de ces types de tests de performance, j’ai couvert le simple jusqu’au type extrême de situations, donc si vous voulez absolument extraire chaque milliseconde possible de vos scripts PowerShell, alors vous voudriez certainement regarder L’approche ArrayList.