arrays - PowerShell执行速度的提高

标签 arrays performance powershell arraylist

昨晚我使用了一些用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/

相关文章:

php - 正则表达式为 PHP 数组的每个项目添加后缀

sql - Oracle 并行查询等待统计信息不在 tkprof 的报告中

powershell - Powershell意外输出$ _。在字符串中

php - 在 PHP 中循环遍历这个数组的最佳方法是什么?

java - 将 POJO 序列化为 JSON - 输入参数化

php - 使用 Redis 引擎配置 Cakephp 2.6.0

powershell - 如何使用PowerShell过滤CSV文件?

powershell - 将带有管道的参数传递到 powershell 脚本中 - 如何转义管道?

c++ - 在不使用 C++11 的情况下在头文件中初始化数组的替代方法

基于比较的算法性能