昨晚我使用了一些用PowerShell编写的排序算法。事先我必须生成一个随机整数数组,以便可以进行排序。但是,生成数组的时间花了我太多时间,因此我改进了代码以使其尽可能快地运行。
我的最终代码如下所示:
$max = 1000000
$RndNumberArr = New-Object System.Collections.ArrayList
$ran = New-Object Random
for ($i = 0; $i -lt $max; $i++)
{
[void]$RndNumberArr.Add($ran.Next(0,$max))
}
使用Measure-Command,我的平均执行时间约为2.5秒。
我注意到使用
ArrayList
比使用固定大小的Array更快(这对我来说没有多大意义,有更快的东西吗?)同样,使用.NET方法
random.Next()
代替CMDLet Get-Random
也可以提高速度(节省30秒左右)。使用.NET方法有什么缺点?
我也认为
[void]$RndNumberArr.Add($ran.Next(0,$max))
防止
Array.Add
输出比使用更快$RndNumberArr.Add($ran.Next(0,$max)) > $null
我对吗?
CMDLet具有明显的时差,是最慢的。
$RndNumberArr.Add($ran.Next(0,$max)) | Out-Null
我的计算机硬件(特别是CPU)是否会影响PowerShell的执行速度,或者速度是否在某个时候受到限制?如果是这样,是否有办法增强分配的系统资源以提高速度?
非常感谢。
最佳答案
如果您的目标是生成大量随机整数,则建议完全避免列表管理:
$r = [Random]::new()
$max = 1000000
$list = foreach ($i in 1..$max)
{
$r.Next(0, $max)
}
与使用
for
循环相比,此代码的运行速度几乎快一倍(大约1.4-1.5秒和2.6秒)。
关于arrays - PowerShell执行速度的提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52015328/