我正在编写一个PowerShell程序来分析1900+大XML配置文件(50000+行,1.5Mb)的内容.仅用于测试我将36个测试文件移动到我的PC(Win 10; PS 5.1; 32GB RAM)并编写快速脚本来测试执行速度.
$TestDir = "E:\Powershell\Test"
$TestXMLs = Get-ChildItem $TestDir -Recurse -Include *.xml
foreach ($TestXML in $TestXMLs)
{
[xml]$XML = Get-Content $TestXML
(($XML.root.servers.server).Where{$_.name -eq "Server1"}).serverid
}
Run Code Online (Sandbox Code Playgroud)
这完成了36到40秒.我用measure-command做了几次测试.
然后我尝试使用foreach -paralell的工作流程,假设并行加载几个文件将给我更快的过程.
Workflow Test-WF
{
$TestDir = "E:\Powershell\Test"
$TestXMLs = Get-ChildItem $TestDir -Recurse -Include *.xml
foreach -parallel -throttle 10 ($TestXML in $TestXMLs)
{
[xml]$XML = Get-Content $TestXML
(($TestXML.root.servers.server).Where{$_.name -eq "Sevrver1"}).serverid
}
}
Test-WF #execute workflow
Run Code Online (Sandbox Code Playgroud)
具有工作流程的脚本需要118到132秒.
现在我只是想知道工作流程运行得如此之慢的原因是什么?重新编译为XMAL可能或更慢的算法在WWF中加载XML文件?