当前位置:  开发笔记 > 运维 > 正文

将数组传递给函数非常慢

如何解决《将数组传递给函数非常慢》经验,为你挑选了0个好方法。

我编写了一个PowerShell脚本,需要在函数之间传递大字节数组.脚本运行速度非常慢.下面的示例代码重现了该问题.它只是将一个10 MiB数组传递给一个不执行任何操作的函数(除了记录消息),并测量调用所需的时间.

function do-nothing
{
    param($foo)
    Write-Verbose -Verbose "in the function"
}

$tenMiB = 10 * 1024 * 1024
$myFoo = New-Object byte[] $tenMiB

Write-Verbose -Verbose "about to do call a function that does nothing..."
$elapsed = Measure-Command -Expression { do-nothing -foo $myFoo }
Write-Verbose -Verbose "doing nothing took $($elapsed.TotalMilliseconds) milliseconds"

我希望这需要几毫秒.在我的家用电脑上,它需要将近3000毫秒,并以100%的速度运行CPU核心.我使用PowerShell 4和PowerShell 5(预生产版本)获得了相同的结果.我的工作PC和服务器也发生了同样的事情.但是,一位同事获得了预期的结果 - 执行几毫秒,CPU使用率最低.

执行时间大致与数组的大小成正比,这对我来说毫无意义.阵列的大小无关紧要.

我想知道数组是否以某种方式被复制.我不认为是这种情况,因为调用GetHashCode()数组会返回函数内部和外部的相同值.

如果数组包装在a中PSCustomObject,并且包装器被传递给函数,则代码将按预期执行.作为一种解决方法,这有点难看,我宁愿在诉诸之前了解正在发生的事情.

有谁能解释这看似奇怪的行为吗?

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有