請參見下面的代碼,這兩個腳本的唯一區別在於第二個腳本塊中缺少腳本塊,並且由於它而導致性能顯着提高。Powershell性能與對象?
這是有原因嗎?是比其他人更強大的PowerShell嗎?
我正在做大量的腳本,其中有很多類似的塊,並且希望得到一個合理的答案,以便獲得簡單的性能提升,比如這個,那麼爲什麼要排除scriptblock中的Where-Object
(別名?
)突然將性能降低了一個可觀的餘量?
PS C:\Scripts> $a = 1..15 | % {
Measure-Command {
$G = Get-ADGroup -Filter *
1..3 | % {
$G | ? {$_.Name -eq "TestGroup$($_)"}
}
}
}
$b = 1..15 | % {
Measure-Command {
$G = Get-ADGroup -Filter *
1..3 | % {
$G | ? Name -eq "TestGroup$($_)"
}
}
}
($a.TotalMilliseconds | Measure -Average).Average
($b.TotalMilliseconds | Measure -Average).Average
283.479413333333
212.57384
實際上,差別要大得多。要隔離它,請將'$ G'分配移出測量,並使用更大的內部循環,如'1..1e5'。 – wOxxOm
不要挑剔,而是爲了避免混淆:它不會「削減績效」_。它可以「縮短運行時間」或「提高性能」。選一個。 :-) –