DOS下,如何统计某个程序运行所花费的时间?

setoy 2011-11-07 06:51:45
注意:是DOS下统计从运行到结束的时间差。
而且程序运行时间一般不超过1秒。
...全文
430 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
setoy 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ljc007 的回复:]

引用 3 楼 setoy 的回复:
话说这是类似于acm比赛,无法下载,也无法自带软件。
只有windows环境。

Windows下的那个叫做CMD,而不是DOS,别让评委笑话啊。
[/Quote]
有区别吗?就像这个,有人叫社区,有人叫论坛
ljc007 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 setoy 的回复:]
话说这是类似于acm比赛,无法下载,也无法自带软件。
只有windows环境。
[/Quote]
Windows下的那个叫做CMD,而不是DOS,别让评委笑话啊。
Forever_Young 2011-11-15
  • 打赏
  • 举报
回复
进程判断不怎么准,改了一下

[code=BatchFile]
@echo off

::把需要监控的程序名去掉后缀名赋值给procname,比如监视记事本就是notepad
set procname=notepad

set cpath=Win32_PerfRawData_PerfProc_Process
set fstr="Timestamp_Object Frequency_Object ElapsedTime"

echo js=(WScript.Arguments(0)-WScript.Arguments(1))/WScript.Arguments(2)>tmp.vbs
echo WScript.echo js>>tmp.vbs

:loop

for /f %%i in ('tasklist /nh /fi "imagename eq %procname%.exe"^|find /i /c "%procname%"') do (if %%i lss 1 goto loop)
set Timestamp_Object=
set Frequency_Object=
set ElapsedTime=
for /f "tokens=*" %%a in ('wmic path %cpath% where "name='%procname%'" get /value^|findstr /ib %fstr%') do (set %%a)
if "%Frequency_Object%"=="" goto loop
for /f %%b in ('cscript /nologo tmp.vbs %Timestamp_Object% %ElapsedTime% %Frequency_Object%') do (echo %%b)

goto loop
[/code]
Forever_Young 2011-11-15
  • 打赏
  • 举报
回复
写了一个代码如下,精度可以达到微秒

[code=BatchFile]
@echo off

::把需要监控的程序名去掉后缀名赋值给procname,比如监视记事本就是notepad
set procname=notepad

set cpath=Win32_PerfRawData_PerfProc_Process
set fstr="Timestamp_Object Frequency_Object ElapsedTime"

echo js=(WScript.Arguments(0)-WScript.Arguments(1))/WScript.Arguments(2)>tmp.vbs
echo WScript.echo js>>tmp.vbs

:loop

for /f %%i in ('tasklist /nh^|find /c "%procname%.exe"') do (if %%i lss 1 goto loop)
set Timestamp_Object=
set Frequency_Object=
set ElapsedTime=
for /f "tokens=*" %%a in ('wmic path %cpath% where "name='%procname%'" get /value^|findstr /ib %fstr%') do (set %%a)
if "%Frequency_Object%"=="" goto loop
for /f %%b in ('cscript /nologo tmp.vbs %Timestamp_Object% %ElapsedTime% %Frequency_Object%') do (echo %%b)

goto loop
[/code]
setoy 2011-11-15
  • 打赏
  • 举报
回复
给个例子~~
ljc007 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 setoy 的回复:]
话说这是类似于acm比赛,无法下载,也无法自带软件。
只有windows环境。
[/Quote]

Windows环境可以调用VBS
Forever_Young 2011-11-08
  • 打赏
  • 举报
回复
CMD下可以监视到,但是CMD只能处理32位精度的计算,通过wmic获取的达到了64位精度,运算上很伤脑筋啊,特别是你这个还确定在1秒内,要是能掉用vbs来处理就可以解决,或者单位在1秒以上的也好处理
setoy 2011-11-08
  • 打赏
  • 举报
回复
话说这是类似于acm比赛,无法下载,也无法自带软件。
只有windows环境。
ljc007 2011-11-07
  • 打赏
  • 举报
回复
下载一个timeit.exe
Forever_Young 2011-11-07
  • 打赏
  • 举报
回复
你这种精度太难为DOS了,你这个使用系统的性能监视器没问题,添加一个新的数据收集器,专门收集进程实例名的elapsed time

18,138

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧