0

私は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'
4

1 に答える 1

2

Select-XmlコマンドレットまたはXmlDocument.SelectNodesメソッドを試しましたか?ネイティブメソッド(XPathを使用)を介したXMLのクエリは、よりもはるかに高速に実行されるはずですWhere-Object

于 2012-10-19T12:33:46.703 に答える