PowerShell: Фильтрация объектов против Where-Object
В этой статье я собираюсь сравнить параметр фильтра с оператором where-object. Учение говорит, что фильтрация более эффективна. В случае with оператором where-object все объекты должны быть сначала извлечены, а затем выполняется фильтрация. Это занимает время. Если сначала отфильтровать, будут извлечены только отфильтрованные объекты. В этой статье мы рассмотрим это с помощью Measure-Command.
Get-Childitem и Where-Object
Measure-Command {Get-Childitem -Path C:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Extension -eq ".txt"}}37 секунд — это неплохо. У меня есть SSD.
Get-Childitem с фильтром
Measure-Command {Get-Childitem -Path C:\ -File -Recurse -ErrorAction SilentlyContinue -Filter *.txt}8 секунд - это намного быстрее.
Заключение
Фильтрация значительно быстрее. Но не все команды предлагают возможность фильтрации. Во многих записях я использую where-object вместо параметра фильтра. Почему? Я к этому привык. Думаю, мне нужно измениться. 😉 См. также мою статью Measure-Command: Сравнение скорости (Foreach против Foreach-Object).

