Donc, Unix a une commande time
qui permet aux utilisateurs de chronométrer leur code/autre chose. Je me demandais si la ligne de commande Windows a quelque chose de similaire.
En outre, j'ai posé une question précédente concernant la ligne de commande Linux ici . Peut-on faire la même chose pour Windows? Si c'est le cas, comment?
Utilisez Powershell
Measure-Command {start-process whateveryouwantexecute -Wait}
Edité selon vos besoins @efficiencylsBliss:
Measure-Command {start-process Java -argumentlist "whateverargumentisneeded" -wait}
J'utilise Win XP, pour une raison quelconque, timeit.exe
ne fonctionne pas pour moi. J'ai trouvé une autre alternative: ptime
:
ptime 1.0 - Mesurez avec précision le temps d'exécution du programme
ptime exécutera toutes les commandes et paramètres spécifiés et mesurera le temps d'exécution (temps d'exécution) en secondes, avec une précision de 5 millisecondes ou plus. Il s'agit d'un minuteur automatique de processus ou d'un programme utilisé à des fins d'évaluation.
Vous pouvez tricher un peu avec un script batch ...
@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul
Puis lancez votre programme comme argument de ce script ...
minuterie myprogram.exe
et pour les arguments ...
minuterie "myprogram.exe -sw1 -sw2"
exemple de sortie:
17:59:20.02
some text
17:59:20.03
placez le script batch quelque part dans votre variable PATH, par exemple. C:\Windows\System32
et nommez-le timer.cmd
. Bien sûr, il y a un petit problème de performance consistant à créer une deuxième instance cmd, bien que très minime.
Il n'y a pas d'équivalent direct à Unix time
sous Windows.
L’Université de Géorgie dispose d’une brève liste de commandes Windows pour les utilisateurs Unix .
Je trouve que les anciennes commandes Windows d'invite de commande et de script .bat sont plutôt limitées comparées aux shells Unix, mais il existe quelques possibilités de bouclage de fichiers, etc. CommandWindows.com propose quelques astuces .
Vous pouvez installer bash
sous Windows (par exemple, en installant CygWin) ou apprendre Windows Powershell (ce qui, je suppose, est un moyen de faire quelque chose d’équivalent).
Si vous essayez d'utiliser PowerShell avec Measure-Command, sachez qu'il peut y avoir des pièges inattendus. Ma commande écrit des données binaires dans un fichier en utilisant la redirection >
mais PowerShell a ajouté un BOM au début du fichier et un saut de ligne CRLF après chaque écriture!
La sortie de votre code peut être transmise à un fichier: Java test <inputfile> | Out-File d:\a.txt
Pour mesurer combien de temps cela prend, vous devez l'encapsuler dans Measure-Commmand:
Measure-Commmand {Java test <inputfile> | Out-File d:\a.txt}
Pour plus de facilité, voici le paquet Chocolatey: https://chocolatey.org/packages/ptimeC:/> choco install ptime
L’avantage si ptime
est qu’elle agit comme la version unix et donne la sortie de la console, ce que Measure-Command { XXX }
ne fait pas (ou du moins je ne sais pas comment faire cela).
Il y a deux options différentes pour obtenir une commande 'time'. Ma préférence va tout simplement à l’installation de Cygwin (fourni avec une commande time
de type UNIX).
Vous pouvez également écrire un script et l'ajouter à votre chemin (afin de pouvoir l'exécuter sans spécifier le chemin complet).
Si vous avez Powershell disponible, essayez ce script (fonctionne lors de l'appel de fichiers - '.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
Exécutez le code avec (par exemple):
time.ps1 python program.py
En utilisant Batch , je suggérerais l’une des meilleures réponses de ici (sur Stackoverflow.com) . Les deux doivent simplement être copiés-collés. Notez que si vous utilisez la solution de paxdiablo , vous devez remplacer
ping -n 11 127.0.0.1 >nul: 2>nul:
avec
%*
gnomon est une solution intéressante si vous n’avez pas seulement besoin du temps d’exécution total d’une commande, mais également d’une ligne pour les mesures de ligne:
Un utilitaire de ligne de commande pour ajouter des informations d'horodatage à la sortie standard d'une autre commande. Utile pour les processus de longue durée pour lesquels vous souhaitez un historique de ce qui prend si longtemps.
Installé en exécutant npm install -g gnomon
, utilisez-le simplement via command | gnomon
.
Un café m'a aidé à trouver ceci:
function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }
Et si vous ne voulez rien générer, remplacez simplement par out-null:
function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }
Vous l'utilisez comme ceci:
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:\>