为什么在 Powershell 中将 PSObject 添加到 ArrayList 需要这么长时间?有更好的方法吗?
Why does it takes so long to add PSObject to ArrayList in Powershell? Any better approach?
我有以下代码
$listA = *some list of 1000 items*
$listB = *other list*
$newList = New-Object System.Collections.ArrayList
foreach($a in $listA) {
$b = get somevalue from list $listB
$temp = New-Object PSObject
$temp | Add-Member Name $a
$temp | Add-Member Age $b
$newList.Add($temp) | Out-Null
}
我也测试了简单数组的性能,但更差。
我认为你的性能问题不是arralist,而是你的对象创建。
使用 Add-Member
构建对象是 V1 构造,实际上是创建对象效率最低的方法。每 Add-Member
都会破坏原始对象并创建一个全新的对象。由于您已使用 V3 标记问题,因此这里有一个更好(更快)的创建对象的方法:
$listA = *some list of 1000 items*
$listB = *other list*
$newList = New-Object System.Collections.ArrayList
foreach($a in $listA) {
$b = get somevalue from list $listB
$Object = [PSCustomObject]@{
Name = $a
Age = $b
}
$newList.Add($Object)
}
我有以下代码
$listA = *some list of 1000 items*
$listB = *other list*
$newList = New-Object System.Collections.ArrayList
foreach($a in $listA) {
$b = get somevalue from list $listB
$temp = New-Object PSObject
$temp | Add-Member Name $a
$temp | Add-Member Age $b
$newList.Add($temp) | Out-Null
}
我也测试了简单数组的性能,但更差。
我认为你的性能问题不是arralist,而是你的对象创建。
使用 Add-Member
构建对象是 V1 构造,实际上是创建对象效率最低的方法。每 Add-Member
都会破坏原始对象并创建一个全新的对象。由于您已使用 V3 标记问题,因此这里有一个更好(更快)的创建对象的方法:
$listA = *some list of 1000 items*
$listB = *other list*
$newList = New-Object System.Collections.ArrayList
foreach($a in $listA) {
$b = get somevalue from list $listB
$Object = [PSCustomObject]@{
Name = $a
Age = $b
}
$newList.Add($Object)
}