Есть ли простой способ рассчитать время выполнения команды в PowerShell, например, команду «время» в Linux?
Я придумал это:
$s=Get-Date; .\do_something.ps1 ; $e=Get-Date; ($e - $s).TotalSeconds
Но я хотел бы что-то более простое, как
time .\do_something.ps1
powershell
time
performance-testing
Паоло Тедеско
источник
источник
time { ping -n 1 google.com } -Samples 10
запустит время команды10
и вернет среднее, минимальное и максимальное время выполнения. Вы можете добавить,-Silent
чтобы проглотить STDOUT.$t = Measure-Command {<<your command or code block>>}
. Попробуйте, а затем введите$t
в приглашении, чтобы увидеть ваши результаты и все свойства, к которым у вас есть доступ, например$t.Milliseconds
,$t.TotalSeconds
и т. Д. Затем мы можем записать любой вывод, например,Write-Host That command took $t.TotalSeconds to complete.
Вы также можете получить последнюю команду из истории и вычесть ее
EndExecutionTime
из своейStartExecutionTime
.источник
Get-History | Group {$_.StartExecutionTime.Hour} | sort Count -desc
увидеть схему использования PowerShell по часам дня. :-)$command = Get-History -Count 1 ; "{0}" -f ($command.EndExecutionTime - $command.StartExecutionTime)
использование
Measure-Command
пример
Канал,
Out-Host
позволяющий вам увидеть выходные данные команды, которая в противном случае используетсяMeasure-Command
.источник
Measure-Command {<your command } | Out-Host
- Out-Host находится за пределами блока сценариевSimples
затем можно использовать как
Вы можете настроить выход
источник
Measure-Command
скрывает вывод команды, так что это решение иногда лучше.Вот функция, которую я написал, которая работает аналогично команде Unix
time
:Источник: https://gist.github.com/bender-the-greatest/741f696d965ed9728dc6287bdd336874
источник
Measure-Command
или одного из различных других способов измерения времени выполнения в Powershell. Если вы прочитали оригинальный вопрос, он попросил что-то, что работает «какtime
команда в Linux».Использование секундомера и форматирование прошедшего времени:
Образцы использования
источник
Просто слово о том, как сделать (неправильные) выводы из любой из команд измерения производительности, указанных в ответах. Существует ряд ловушек, которые следует принимать во внимание, помимо рассмотрения времени простейшего вызова (пользовательской) функции или команды.
Sjoemelsoftware
Лично я считаю, что « Sjoemelsoftware » не всегда намеренно создается для того, чтобы обманывать результаты тестов, но может возникать в результате практической ситуации, которая похожа на тестовые примеры, показанные ниже.
В качестве примера, используя перечисленные команды измерения производительности, Language Integrated Query (LINQ) (1) , часто квалифицируется как на голодном способ получить что - то сделать , и это часто бывает, но , конечно , не всегда! Любой, кто измеряет увеличение скорости в 40 или более раз по сравнению с собственными командами PowerShell, вероятно, неправильно измеряет или делает неправильный вывод.
Дело в том, что некоторые классы .Net (например, LINQ) используют ленивую оценку (также называемую отложенным выполнением (2) ). Это означает, что когда вы присваиваете выражение переменной, оно почти сразу кажется выполненным, но на самом деле оно еще ничего не обрабатывает!
Предположим, что у вас есть точечный источник вашей
. .\Dosomething.ps1
команды, которая имеет либо PowerShell, либо более сложное выражение Linq (для простоты объяснения я непосредственно встроил выражения непосредственно вMeasure-Command
):Результат кажется очевидным, более поздняя команда Linq примерно в 40 раз быстрее, чем первая команда PowerShell . К сожалению, не все так просто ...
Давайте выведем результаты:
Как и ожидалось, результаты такие же, но если вы обратили пристальное внимание, вы заметите, что отображение
$Linq
результатов заняло гораздо больше времени, чем$PowerShell
результаты.Давайте определим это , просто получив свойство полученного объекта:
Потребовалось примерно в 90 раз больше времени для извлечения свойства
$Linq
объекта, чем$PowerShell
объекта, и это был всего лишь один объект!Также обратите внимание на другую ловушку, что если вы сделаете это снова, некоторые шаги могут появиться намного быстрее, чем раньше, это потому, что некоторые выражения были кэшированы.
В итоге, если вы хотите сравнить производительность между двумя функциями, вам нужно будет реализовать их в используемом вами случае, начать с нового сеанса PowerShell и основывать свои выводы на фактической производительности полного решения.
(1) Для получения дополнительной информации и примеров по PowerShell и LINQ я рекомендую этот сайт: Высокопроизводительный PowerShell с LINQ (2) Я думаю, что между этими
двумя концепциями есть небольшое различие, так как при ленивой оценке результат вычисляется при необходимости применительно к отсроченное выполнение, в котором результат вычисляется, когда система простаивает
источник