Arrays 使用Powershell使用.Add()问题并填充ArrayList
我试图为一个包含超过10000个条目的数据数组的脚本添加性能,然后在foreach object语句中使用它,通过调用另一个函数用新数据填充空白的ArrayList。我一直在阅读如何不使用+=,这也是我学习的方法,因为它会破坏阵列并为每个项目重建阵列,因此性能非常糟糕。 我遇到的问题是我需要调用一个函数来填充一个空的ArrayList,但在.Add()方法中我似乎无法做到这一点 旧代码:Arrays 使用Powershell使用.Add()问题并填充ArrayList,arrays,powershell,Arrays,Powershell,我试图为一个包含超过10000个条目的数据数组的脚本添加性能,然后在foreach object语句中使用它,通过调用另一个函数用新数据填充空白的ArrayList。我一直在阅读如何不使用+=,这也是我学习的方法,因为它会破坏阵列并为每个项目重建阵列,因此性能非常糟糕。 我遇到的问题是我需要调用一个函数来填充一个空的ArrayList,但在.Add()方法中我似乎无法做到这一点 旧代码: Function get_gfe Function get_os $gfe = [System.Co
Function get_gfe
Function get_os
$gfe = [System.Collections.ArrayList]@()
$gfe = get_gfe
$getos = [System.Collections.ArrayList]@()
$gfe | foreach { $getos += get_os $_}
这需要一个多小时才能用数据填充$getos。
我希望用这样的东西来代替,但它不起作用,任何帮助都将不胜感激
$gfe | foreach { [void]$getos.Add(get_os $_)}
我知道您可以使用.Add($\),但这不符合我的需要,而且我在.Add()方法中找不到使用其他代码或调用函数的任何引用
提前谢谢 为什么不将
foreach
-循环扩展为如下内容:
foreach ($entry in $gfe){
$os = get_os $entry
[void]$getos.add($os)
}
与管道输送到foreach对象
相比,foreach
循环也节省了时间
当然,因为我不知道你的函数实际上在做什么,这并不是节省时间的最有效的方法。您可以使用
measure命令
确定为什么不将foreach
-循环扩展为如下内容:
foreach ($entry in $gfe){
$os = get_os $entry
[void]$getos.add($os)
}
与管道输送到foreach对象
相比,foreach
循环也节省了时间
当然,因为我不知道你的函数实际上在做什么,这并不是节省时间的最有效的方法。您可以使用
measure命令确定$getos
的类型是System.Collections.ArrayList而不是“普通”数组(System.Object[])是否是绝对重要的
如果没有,我认为下一个代码可以执行得更快:
$getos = foreach ($entry in $gfe) {
get_os $entry # output the result of function get_os and collect in variable $getos
}
$getos
的类型是System.Collections.ArrayList而不是“普通”数组(System.Object[]),这是否绝对重要
如果没有,我认为下一个代码可以执行得更快:
$getos = foreach ($entry in $gfe) {
get_os $entry # output the result of function get_os and collect in variable $getos
}
感谢大家的推荐,它们帮助我更好地理解了foreach、array和arrayLists。我们怀疑这种缓慢与foreach循环访问一个函数有关,该函数对每个序列号使用一个API。我们最近升级了MDM控制台并更换了底层硬件 感谢大家的推荐,他们帮助我更好地理解了foreach、array和arrayLists。我们怀疑这种缓慢与foreach循环访问一个函数有关,该函数对每个序列号使用一个API。我们最近升级了MDM控制台并更换了底层硬件 .Add(get_os$)
->.Add((get_os$)
.Add(get_os$)
->.Add((get_os$))
这一点都不重要,通常我会将数组创建为$getos=@()。我以前也像你写的那样写foreach语句,但我想我已经读到使用管道方法更快,在我的例子中,不是这样。实际上,你建议的方法不同,我现在正在尝试,请继续关注。@bdjenky我正在关注。。有什么要报告的吗?我已经尝试了上面提到的所有方法,都是使用measureobject命令。所有这些都是在50分钟的范围内完成的,这接近我使用常规阵列时的体验。这可能是因为我试图实现的目标已经“优化”。当使用适当的参数手动运行函数get_os时,显示数据所需的时间不到一秒钟,因此PS遍历所有序列号的循环并将其输入该函数的速度一定很慢。我不知所措。这一点都不重要,通常我会将数组创建为$getos=@()。我以前也像你写的那样写foreach语句,但我想我已经读到使用管道方法更快,在我的例子中,不是这样。实际上,你建议的方法不同,我现在正在尝试,请继续关注。@bdjenky我正在关注。。有什么要报告的吗?我已经尝试了上面提到的所有方法,都是使用measureobject命令。所有这些都是在50分钟的范围内完成的,这接近我使用常规阵列时的体验。这可能是因为我试图实现的目标已经“优化”。当使用适当的参数手动运行函数get_os时,显示数据所需的时间不到一秒钟,因此PS遍历所有序列号的循环并将其输入该函数的速度一定很慢。我不知所措。