2016-04-03 20 views
1

私はPSCustomObjectとPowerShell ISEの自動完了を巡って私に何か興味深いことが分かりました。PSCustomObjectとoverloadメソッド

PSCustomObjectを含む変数がある場合は、簡単に見つけられないフィルタリング方法があるようです。

このフィルタリング方法は、パイプラインとWhere-Objectを使用するよりも高速ですか?

$CusomObject.Where({$_ -like '*hidden*'}) 

$CustomObject | Get-Member -Forceを使用すると、この過負荷がリストされません。私はreference to this overload hereを見つけましたが、私の検索でこれを多く使うことはできません。

enter image description here

答えて

0

これはただのスクリプトブロックを実行し、Trueの返却を確認するメッセージが表示されます。限られたテストから、WhereはPSオブジェクトでより速く(約1秒)なります。注:Stopwatchが間違っている可能性があります。 Where-Objectはドキュメントを持ち、ForEach-Objectよりも高速に実行されます。 BeWhere PSv4にバグがあります。

スクリプトブロック

write-host "Started at $(get-date)" 
$j = $i.Where({$_ -like "*"}) 
write-host "Ended at $(get-date)" 
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())" 

00:00:00.0309266

ForEach-Object

$elapsed = [System.Diagnostics.Stopwatch]::StartNew() 
write-host "Started at $(get-date)" 
$j = $i | %{$_ -like "*"} 
write-host "Ended at $(get-date)" 
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())" 

00:00:01.0555753

Where-Object

$elapsed = [System.Diagnostics.Stopwatch]::StartNew() 
write-host "Started at $(get-date)" 
$j = $i | ?{$_ -like "*"} 
write-host "Ended at $(get-date)" 
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())" 

00:00:00.0348174

関連する問題