我有大量的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'
答案 0 :(得分:2)
您是否尝试过Select-Xml
cmdlet或XmlDocument.SelectNodes方法?通过其本机方法(使用XPath)查询XML的速度应该比Where-Object
快得多。