#Metrics Brah #First, PowerShell's native array methods $Iterations = 10000; $PSArrayMetrics = Measure-Command -Expression { $PSArray = @(); for ($i=0; $i -lt $Iterations; $i++) { $PSArray += $i; } } $PSInitializedArrayMetrics = Measure-Command -Expression { $PSArray = @(0)*$Iterations; for ($i=0; $i -lt $Iterations; $i++) { $PSArray[$i]=$i; } } $PSInitializedArrayReadMetrics = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null=$PSArray.Contains($I) } } $PSArrayPipeFilterMetrics = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null = $PSArray | Where-Object{$_ -eq $i} } } $NetArrayMetrics = Measure-Command -Expression { $PSArray = [int[]]::new($Iterations); for ($i=0; $i -lt $Iterations; $i++) { $PSArray[$i]=$i; } } $NetArrayReadMetrics = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null=$PSArray.Contains($I) } } #So initialize your arrays and you should be fine $NetListMetrics = Measure-Command -Expression { $PSArray = [System.Collections.Generic.List[int]]::new(); for ($i=0; $i -lt $Iterations; $i++) { $PSArray.Add($I) } } #Reads $NetListReadsMetrics = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null=$PSArray.Contains($I) } } #Lets try sorting and binary search $PSArray.Sort() $NetListBinarysearchMetrics = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null=$PSArray.BinarySearch($I) } } #If you can't consider using lists instead $PSHashTable = Measure-Command -Expression { $PSArray = @{} for ($i=0; $i -lt $Iterations; $i++) { $PSArray += @{$I.ToString()=$I} } } $PSHashAddTable = Measure-Command -Expression { $PSArray = @{} for ($i=0; $i -lt $Iterations; $i++) { $PSArray.Add($I.ToString(),$I) } } #And reads $PSHashTableReads = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null = $PSArray.ContainsKey($i) #I dont really care about value atm } } #and .net version $NetHashTable = Measure-Command -Expression { $PSArray = [System.Collections.Generic.Dictionary[string,int]]::new() for ($i=0; $i -lt $Iterations; $i++) { $PSArray.Add($I.ToString(), $I) } } #with reads $NetHashTableReads = Measure-Command -Expression { for ($i=0; $i -lt $Iterations; $i++) { $null = $PSArray.ContainsKey($i) #I dont really care about value atm } } #Well, that is alot faster