我发现,如果您在PowerShell中创建一个数组并执行以下操作:
$myArray = @()
$myArray += 7
每次执行此语句时,它都会创建一个以7结尾的NEW数组,并返回新数组并删除旧数组!基本上,我们是在大约10,000次迭代的循环中执行此操作的,这使其非常慢!
如果我改用ArrayList,则通过调用.Add(x)
,我们发现它更快。我的问题是哪个代码更快?
$myArrayList.Add(x)
或
$myArrayList += x
还是一样?因为我们现有的代码为+= x
格式。我们希望不必将所有代码都更改为.Add(x)
格式。
答案 0 :(得分:3)
使用以下命令(10,000次迭代)获得这些结果。
.add()
花了0s 45.2869ms
+=
花了2s 900.2777 ms
Measure-Command -Expression {
$i = 0
$myArrayList = New-Object System.Collections.ArrayList
Do {
#$myArrayList.add($i)
$myArrayList += $i
$i++
} While ($i -lt 10000)
}
答案 1 :(得分:3)
Drew's answer很好地显示了+=
在PowerShell中具有数组的性能不佳;您已经在问题中找到了原因(每次都会创建一个新数组,复制所有元素,等等)。
请注意,ArrayList不是您唯一的选择。有时候,仅仅改变您的做事方式会产生很大的变化。例如,循环和迭代在PowerShell中很常见,并且通过赋值制作输出数组非常快,而且我认为语法也更好。
比较(2s 406ms
):
Measure-Command -Expression {
$a = @()
1..10000 | % { $a += $_*2 }
}
对此(60ms
):
Measure-Command -Expression {
$a = 1..10000 | % { $_*2 }
}