私はXMLノードの膨大な配列を持っており、時には最大40万のアイテムがあります。where-objectを使用して、Type属性に基づいてアイテムを選択します。私の問題は、これらのアイテムをウォークオーバーするのにかなりの時間がかかることです。配列から選択したばかりのアイテムを削除して、次のオブジェクトの配列を小さくすることができれば、より簡単になります。これが私がしていることです:
$subset = $items | Where-Object {$_.Type -eq "2"}
'prosess ItemType 2'
$subset = $items | Where-Object {$_.Type -eq "4"}
'prosess ItemType 4'
$subset = $items | Where-Object {$_.Type -eq "8"}
'prosess ItemType 8'
問題は$items
、以前から残っているものを繰り返すのではなく、もう一度繰り返す必要があることです。where-object
また、where-objectがシングルスレッド操作であり、1つのコアでのみ実行されることも役に立ちません。
私が考えていたのはこのようなものですが、それがより良いパフォーマンスになるかどうかはわかりません:
$subset = $items | Where-Object {$_.Type -eq "2"}
$items = $items | Where-Object {$_.Type -ne "2"}
'prosess ItemType 2'
$subset = $items | Where-Object {$_.Type -eq "4"}
$items = $items | Where-Object {$_.Type -ne "4"}
'prosess ItemType 4'
$subset = $items | Where-Object {$_.Type -eq "8"}
'prosess ItemType 8'