小编aut*_*vet的帖子

为什么PowerShell工作流比XML文件分析的非工作流脚本慢得多

我正在编写一个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文件?

xml powershell performance

5
推荐指数
1
解决办法
2154
查看次数

标签 统计

performance ×1

powershell ×1

xml ×1