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 是单线程操作并且仅在一个内核上执行也无济于事

我在想的是这样的,但我不确定它是否会表现得更好:

$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-Xmlcmdlet 或 XmlDocument.SelectNodes 方法?通过其本机方法(使用 XPath)查询 XML,应该比Where-Object.

于 2012-10-19T12:33:46.703 回答