Ho avuto alcuni commenti su un recente articolo di confronto delle prestazioni che sono stati ben accolti e mi ha incoraggiato a scrivere alcuni di questi articoli simili. Quindi, senza ulteriori indugi, iniziamo a guardare l’aggiunta di elementi a un array e quale approccio sarebbe migliore in termini di prestazioni.
In genere, l’approccio più comune che vedo con l’aggiunta di elementi a un array in PowerShell è attraverso l’uso dell’operatore+=.,
$a = @()$a += 'data'$a$a += 'test'$a
Ho dovuto prima inizializzare l’array, altrimenti i miei tentativi di aggiungere il testo sarebbero invece trattati come testo concatenante, che non è quello che sto cercando in questo esempio. Come ho detto, questo è l’approccio comune che vedo, ma è necessariamente l’approccio più veloce? Beh, la risposta e ‘ no.
Utilizzando un ArrayList
La risposta a prestazioni migliori è nell’uso di un ArrayList. Come si può vedere sempre di più con ottenere prestazioni migliori da PowerShell, in genere si vedrà una mossa verso l’utilizzo di alcuni .,Istanze Net per eseguire operazioni simili che possono essere eseguite utilizzando comandi o operatori PowerShell effettivi. Quindi qualcosa che ho fatto sopra può essere fatto come segue:
$a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a
Lo 0 e l ‘ 1 che vedi essere emesso ogni volta che aggiungo un elemento indica l’indice di cui l’elemento è stato aggiunto nella raccolta. Quindi ‘data’ è stato aggiunto all’indice 0 e ‘test’ è stato aggiunto all’indice 1. Questo può essere piuttosto fastidioso a mio parere e può inquinare la pipeline e portare risultati indesiderati. È possibile aggirare questo problema assicurandosi che i dati vengano inviati a una posizione Null.,
Abbiamo due opzioni per creare una raccolta di elementi configurati prima di noi, ma la prossima domanda è quale è il più veloce? Scopriamolo!
Non sto dicendo che ArrayList ha vinto ogni volta wait aspetta, sto dicendo che! Man mano che il numero totale di elementi aggiunti a ciascuna raccolta aumentava, il tempo aumentava anche per ciascuno degli approcci con il += che aumentava piuttosto drammaticamente verso la fine. Ciò che sta accadendo con l’operatore += è che in realtà crea un nuovo array ogni volta che si utilizza l’operatore in modo che possa aggiungere il nuovo elemento alla raccolta., Non esattamente efficiente, ma ottiene il lavoro fatto. Non lo troverai con l’approccio ArrayList in quanto aggiunge l’elemento direttamente nella raccolta.
Come con uno qualsiasi di questi tipi di test delle prestazioni, ho coperto il semplice tipo di situazioni estreme, quindi se vuoi assolutamente spremere ogni possibile millisecondo dai tuoi script PowerShell, allora vorresti sicuramente guardare l’approccio ArrayList.