64

Итак, в Unix есть команда time которая позволяет пользователям определять время своего кода / других вещей. Мне было интересно, если в командной строке Windows есть что-нибудь подобное.

Кроме того, я задал предыдущий вопрос относительно командной строки Linux здесь. Можем ли мы сделать то же самое для Windows? Если так, то как?

10 ответов10

55

Используйте Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Отредактировано в соответствии с вашими потребностями @efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}
20

Я использую Win XP, почему-то у меня не работает timeit.exe . Я нашел другую альтернативу: ptime:

ptime 1.0 - точно измерить время выполнения программы

ptime запустит любую указанную команду и параметры и измерит время выполнения (время выполнения) в секундах с точностью до 5 миллисекунд или лучше. Это автоматический таймер процесса или программный таймер, используемый для целей тестирования.

15

Вы можете немного обмануть с помощью пакетного сценария ...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

Затем запустите вашу программу в качестве аргумента этого скрипта ...

timer myprogram.exe

и для аргументов ...

timer "myprogram.exe -sw1 -sw2"

пример вывода:

17:59:20.02
some text
17:59:20.03

поместите пакетный скрипт где-нибудь в переменной PATH, например, C:\Windows\System32 и назовите его timer.cmd . Конечно, есть небольшой удар по производительности для разветвления второго экземпляра cmd, хотя и очень минимальный.

3

В Windows нет прямого эквивалента time Unix.

У Университета Джорджии есть краткий список команд Windows для пользователей Unix

Я считаю, что более старая командная строка Windows и сценарии .bat довольно ограничены по сравнению с оболочками Unix, но есть некоторые средства для циклического перебора файлов и т.д. CommandWindows.com имеет несколько советов

Вы можете либо установить bash на Windows (например, установив CygWin), либо изучить Windows Powershell (который, как я предполагаю, имеет средство сделать что-то эквивалентное).

2

Если вы пытаетесь использовать PowerShell с Measure-Command, имейте в виду, что могут быть некоторые неожиданные ошибки. Моя команда записывает двоичные данные в файл с помощью перенаправления > но PowerShell добавляет спецификацию в начало файла и разрыв строки CRLF после каждой записи!

2

Вывод вашего кода может быть передан в файл: java test <inputfile> | Out-File d:\a.txt

Для измерения того, сколько времени это займет, вы должны инкапсулировать его в Measure-Commmand:

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}

1

Для удобства использования, вот шоколадный пакет:https://chocolatey.org/packages/ptime C:/> choco install ptime

Преимущество, если ptime состоит в том, что он действует как версия unix и выдает консольный вывод, чего нет Measure-Command { XXX } (или, по крайней мере, я не знаю, как это сделать).

0

Есть несколько вариантов получения команды «время». Я предпочитаю просто установить Cygwin (который поставляется с UNIX-подобной time командой).

Кроме того, вы можете написать сценарий и добавить его в свой путь (чтобы вы могли выполнить его без указания всего пути).

Если у вас есть Powershell , попробуйте этот скрипт (работает при вызове файлов - '. Exe' и т.д.):

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

Запустите код с (например):

time.ps1 python program.py

Используя пакет, я бы предложил один из лучших ответов здесь (на Stackoverflow.com). Оба должны быть скопированы. Обратите внимание, что если вы используете решение paxdiablo, вы должны заменить

ping -n 11 127.0.0.1 >nul: 2>nul: 

с

%*
0

Gnomon - хорошее решение, если вам требуется не только общее время выполнения команды, но и строка для линейных измерений:

Утилита командной строки для добавления метки времени к стандартному выводу другой команды. Полезно для длительных процессов, где вы хотите получить исторический отчет о том, что занимает так много времени.

Устанавливается путем запуска npm install -g gnomon , а затем просто используйте его с помощью command | gnomon

0

Немного кофе помогло мне придумать это:

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

И если вы хотите, чтобы он ничего не выводил, просто замените на out-null:

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

Вы используете это так:

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .