Use o Powershell
Measure-Command {start-process whateveryouwantexecute -Wait}
Editado conforme sua necessidade @efficiencylsBliss:
Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}
Portanto, o Unix tem um comando time
que permite que os usuários calculem seu código / outras coisas. Eu queria saber se a linha de comando do Windows tem algo parecido.
Além disso, fiz uma pergunta anterior sobre a linha de comando do Linux aqui . Podemos fazer o mesmo para o Windows? Se sim, como?
Use o Powershell
Measure-Command {start-process whateveryouwantexecute -Wait}
Editado conforme sua necessidade @efficiencylsBliss:
Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}
Estou usando o Win XP, por algum motivo, timeit.exe
não está funcionando para mim. Eu encontrei outra alternativa: ptime
:
ptime 1.0 - Accurately measure program execution time
ptime will run any specified command and parameters, and measure the execution time (run time) in seconds, accurate to 5 millisecond or better. It is an automatic process timer, or program timer used for benchmark purposes.
Você pode trapacear um pouco com um script em lote ...
@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul
Em seguida, execute seu programa como um argumento para esse script ...
timer myprogram.exe
e para argumentos ...
timer "myprogram.exe -sw1 -sw2"Exemplo de saída
:
17:59:20.02
some text
17:59:20.03
coloque o script em lotes em algum lugar na sua variável PATH, por exemplo C:\Windows\System32
e nomeie timer.cmd
. É claro que há um pequeno impacto no desempenho de bifurcação de uma segunda instância de cmd, embora seja muito pequena.
Não há equivalente direto ao Unix time
no Windows.
A Universidade da Geórgia tem uma breve lista de comandos do Windows para usuários do Unix
Acho que o prompt de comando mais antigo do Windows e o script .bat são bastante limitados em comparação com os shells Unix, mas há algumas facilidades para executar loops sobre arquivos, etc. O CommandWindows.com tem alguns dicas
Você pode instalar bash
no Windows (por exemplo, instalando o CygWin) ou aprender o Windows Powershell (que, presumo, tem um meio de fazer algo equivalente).
A saída para o seu código pode ser canalizada para um arquivo: java test <inputfile> | Out-File d:\a.txt
Para medir quanto tempo você precisa encapsular no Measure-Commmand:
Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}
Se você tentar usar o PowerShell com o Measure-Command, saiba que pode haver algumas dicas inesperadas. Meu comando grava dados binários em um arquivo usando o redirecionamento >
, mas o PowerShell adicionou uma BOM para o início do arquivo e uma quebra de linha CRLF após cada gravação!
Existem algumas opções diferentes para obter um comando de 'tempo'. Minha preferência é apenas instalar o Cygwin (que vem com um comando time
do tipo UNIX).
Alternativamente, você pode escrever um script e adicioná-lo ao seu caminho (para que você possa executá-lo sem especificar o caminho inteiro).
Se você tiver o Powershell disponível, experimente este script (funciona ao chamar arquivos - '. exe', etc.):
$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
Execute o código com (por exemplo):
time.ps1 python program.py
Usando o Lote , sugiro uma das principais respostas de aqui (no Stackoverflow.com) . Ambos precisam apenas ser copiados e colados. Observe que, se você usar a solução do paxdiablo , deverá substituir
ping -n 11 127.0.0.1 >nul: 2>nul:
com
%*
Algum café me ajudou a pensar nisso:
function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }
E se você quiser que não saia nada, apenas substitua por out-null:
function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }
Você usa assim:
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:\>
gnomon é uma boa solução se você não precisa apenas do tempo total de execução de um comando, mas também de linha para linha medições:
A command line utility to prepend timestamp information to the standard output of another command. Useful for long-running processes where you'd like a historical record of what's taking so long.
Instalado executando npm install -g gnomon
e, em seguida, use-o via command | gnomon
.
Para facilidade de uso, aqui está o pacote de chocolate:
link
C:/> choco install ptime
A vantagem se ptime
é que ele age como a versão unix e produz a saída do console, o que Measure-Command { XXX }
não faz (ou pelo menos eu não sei como fazer isso).
Tags command-line windows