以下のコードを参照してください.2つのスクリプトの唯一の違いは、2つ目のスクリプトブロックがないことです。そのためにパフォーマンスが大幅に向上します。Powershell Perfomance with Where-Object?
これには理由がありますか?もう一つはパワーシェルにネイティブですか?
多くのスクリプトを複数の類似のブロックで実行していますが、このような簡単なパフォーマンスの向上を得るための合理的な答えが必要です。なぜ、スクリプトブロックの除外が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.e5'のようなより大きな内部ループを使用します。 – wOxxOm
混乱を避けるために、むしろ混乱を避けるために、 "パフォーマンスをカット"しません_。それは「実行時間を削減する」か「パフォーマンスを向上させる」のいずれかです。一つを選ぶ。 :-) –