Я полагаю, что это один из примеров, где основное внимание уделялось одной команде ( Время выполнения объекта Foreach-объект против Foreach l oop), а не завершению решения.
В целом, я бы порекомендовал вам взглянуть на все ваше решение, а не только на отдельные утверждения, поскольку производительность полного (PowerShell) решения должна быть лучше, чем сумма его частей .
В вашем случае, если вам нужно создать экземпляр сценария и вызвать его с помощью оператора вызова &
только потому, что вы хотите использовать оператор Foreach
, вы, вероятно, стремитесь к цели:
Для небольшого предоставленного вами файла,
This (используя конвейер с ForEach-Object
):
$groups | ForEach-Object {
[PSCustomObject]@{
PRIORITY = [int]$_.Name
KEY = ($_.Group.KEY | Select-Object -Unique).Count
HITS = $_.Count
}
} | Sort-Object -Property PRIORITY -Descending # | Out-File -FilePath output.txt
В целом выглядит быстрее, чем это (с помощью оператора ForEach
и оператор вызова):
& {
foreach ($group in $groups)
{
[PSCustomObject]@{
PRIORITY = [int]$group.Name
KEY = ($group.Group.KEY | Select-Object -Unique).Count
HITS = $group.Count
}
}
} | Sort-Object -Property PRIORITY -Descending | Out-File -FilePath output.txt
В связи с характером командлета Sort-Object
(все объекты должны иметь возможность его сортировать), ему потребуется остановить конвейер, чтобы изменить их порядок, для того же причина, мульти Подход с многопоточностью, вероятно, не имеет особого смысла.