如何使用Windowsbatch file来衡量控制台应用程序的性能?

如何编写一个简单的batch file来衡量基于控制台的应用程序的性能? 控制台应用程序接受两个命令行参数。

我想得到:

StartTime = System Dos time myconsoleapp arg1, arg2 StopTime = System Dos Time timeDelta = stoptime - starttime 

我会将timeDelta写入文件或在控制台上显示。

Solutions Collecting From Web of "如何使用Windowsbatch file来衡量控制台应用程序的性能?"

一个纯粹的批量解决方案可以。

 @echo off set "startTime=%time%" for /L %%n in (1,1, 1000) do <nul set /p "=" set "stopTime=%time%" call :timeDiff diff startTime stopTime echo %diff% milli seconds goto :eof :timeDiff setlocal call :timeToMS time1 "%~2" call :timeToMS time2 "%~3" set /a diff=time2-time1 ( ENDLOCAL set "%~1=%diff%" goto :eof ) :timeToMS ::### WARNING, enclose the time in " ", because it can contain comma seperators SETLOCAL EnableDelayedExpansion FOR /F "tokens=1,2,3,4 delims=:,.^ " %%a IN ("!%~2!") DO ( set /a "ms=(((30%%a%%100)*60+7%%b)*60+3%%c-42300)*1000+(1%%d0 %% 1000)" ) ( ENDLOCAL set %~1=%ms% goto :eof ) 

下面的批次“程序”应该做你想做的。 请注意,它以毫秒为单位输出数据,而不是毫秒。 使用的命令的精确度仅为厘秒。

这是一个输出示例:

 STARTTIME: 13:42:52,25 ENDTIME: 13:42:56,51 STARTTIME: 4937225 centiseconds ENDTIME: 4937651 centiseconds DURATION: 426 in centiseconds 00:00:04,26 

这是批处理脚本:

 @echo off setlocal rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99 set STARTTIME=%TIME% rem here begins the command you want to measure dir /s > nul rem here ends the command you want to measure set ENDTIME=%TIME% rem output as time echo STARTTIME: %STARTTIME% echo ENDTIME: %ENDTIME% rem convert STARTTIME and ENDTIME to centiseconds set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100) set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100) rem calculating the duratyion is easy set /A DURATION=%ENDTIME%-%STARTTIME% rem we might have measured the time inbetween days if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME% rem now break the centiseconds down to hors, minutes, seconds and the remaining centiseconds set /A DURATIONH=%DURATION% / 360000 set /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000 set /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100 set /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100) rem some formatting if %DURATIONH% LSS 10 set DURATIONH=0%DURATIONH% if %DURATIONM% LSS 10 set DURATIONM=0%DURATIONM% if %DURATIONS% LSS 10 set DURATIONS=0%DURATIONS% if %DURATIONHS% LSS 10 set DURATIONHS=0%DURATIONHS% rem outputing echo STARTTIME: %STARTTIME% centiseconds echo ENDTIME: %ENDTIME% centiseconds echo DURATION: %DURATION% in centiseconds echo %DURATIONH%:%DURATIONM%:%DURATIONS%,%DURATIONHS% endlocal goto :EOF