Jag hade några kommentarer på en senaste prestandajämförelseartikel som mottogs väl och uppmuntrade mig att skriva några fler av dessa liknande artiklar. Så utan ytterligare ado, kan komma igång med att titta på att lägga till objekt till en array och vilket tillvägagångssätt skulle vara bättre när det gäller prestanda.
vanligtvis är det vanligaste tillvägagångssättet som jag ser med att lägga till objekt i en matris i PowerShell genom att använda + = – operatören.,
$a = @()$a += 'data'$a$a += 'test'$a
jag var tvungen att först initiera matrisen, annars skulle mina försök att lägga till texten istället behandlas som sammanlänkande text, vilket inte är vad jag letar efter i det här exemplet. Som jag sa är detta det gemensamma tillvägagångssätt som jag ser, men är det nödvändigtvis det snabbaste tillvägagångssättet? Svaret är nej.
använda en ArrayList
svaret på bättre prestanda är i användningen av en ArrayList. Som du kan se mer och mer med att få bättre prestanda ur PowerShell ser du vanligtvis ett drag mot att använda några .,Net instanser för att utföra liknande operationer som kan göras med faktiska PowerShell kommandon eller operatörer. Så något som jag gjorde ovan kan göras som följande:
$a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a
0 och 1 som du ser matas ut varje gång jag lägger till ett objekt indikerar indexet för vilket objektet lades till i samlingen. Så ”data” lades till vid 0-indexet och ”test” lades till i 1-indexet. Detta kan vara ganska irriterande enligt min mening och kan förorena rörledningen och ge oönskade resultat. Du kan komma runt detta genom att se till att data skickas till en Null-plats.,
Vi har två alternativ för att skapa en samling objekt som ställts in före oss, men nästa fråga är vilken som är den snabbaste? Låt oss ta reda på det!
Jag säger inte att ArrayList vann varje gång…vänta, jag säger Det! Eftersom det totala antalet objekt som läggs till varje samling ökade tiden också för var och en av tillvägagångssätten med += ökar ganska dramatiskt nära slutet. Vad som händer med + = – operatören är att det faktiskt bygger ut en ny array varje gång du använder operatören så att den kan lägga till det nya objektet i samlingen., Inte riktigt effektivt, men det får jobbet gjort. Du kommer inte att hitta det med ArrayList-metoden eftersom den lägger till objektet direkt i samlingen.
som med någon av dessa typer av prestandatester täckte jag det enkla upp den extrema typen av situationer, så om du absolut vill klämma ut alla möjliga millisekund ur dina PowerShell-skript, skulle du definitivt vilja titta på Arraylistmetoden.