[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
stop,要想不跑偏必须先统一一下意见,因为以后的讨论可能是以此为前提的:
1、set 命令读取变量时的速度快于预处理解释字符串的速度,也就是说set /a m=n(此时n=1)真的快于set /a m=1吗?
2、set 命令读取变量的速度是否取决于变量的字符串长度?

暂时没时间做实验,证明这两个假设的工作先交给诸位了哈...

TOP

至于set命令内部预处理的耗时,请参考11楼测试结果,虽然结果相同时速度仍有差异,但是预处理并非决定性因素。

TOP

绝对是有差别的,计算机只是算得快并不是算得巧,追朔到最原本的电路开关上不论是什么只有0和1的差别,所以不论是加减还是乘除都是在做加法运算,只是正序还是倒序的问题.
所以虽然在一般计算中时间差别很微小(由于CPU能力太强),但累加到一定数量时还是会出现差别的!

当然程序的编程优化可以改变时间的最终结果,但也只能做到均衡,无法在极端条件下也做到一样快,
从绝对时间观上说是一定有区别的,不论是千分之一秒还是万分之一秒!不论你是否能感觉到!
差别依然还是有的!

TOP

为了证实这个推论,首先要做出计算公式,另外要有科学的验证观,不可以只凭一次数据就下结论,
因此我发现计算机的其它软件也会影响结果,我运行时把网络和所有的应用程序都退出了.
为了更加准确我把程序写了两次,将计算互换位置以验正计算结果的真实性与无干涉性.
并做了反复循环以让大家利用平均数来进行验正.
另外为了不受开程序时鼠标点击和键盘的缓冲影响特加了多行空显,所以所有语句都是有用的!
  1. @echo off
  2. :xx
  3. echo.
  4. echo.
  5. echo.
  6. echo.
  7. echo.
  8. echo.
  9. echo 开始计算 1*1 用时如下:
  10. set t=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  11. for /l %%i in (1,1,10000) do set/a b=1*1
  12. set t1=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  13. set/a t2="%t1%"-"%t%"
  14. echo 用时0.%t2%秒
  15. echo.
  16. echo.
  17. echo.
  18. echo.
  19. echo 开始计算 1234567*134567 用时如下:
  20. set t=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  21. for /l %%i in (1,1,10000) do set/a b=1234567*134567
  22. set t1=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  23. set/a t2=%t1%-%t%
  24. echo 用时0.%t2%秒
  25. pause
  26. echo.
  27. echo.
  28. echo.
  29. echo.
  30. echo.
  31. echo.
  32. echo 开始计算 1234567*134567 用时如下:
  33. set t=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  34. for /l %%i in (1,1,10000) do set/a b=1234567*134567
  35. set t1=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  36. set/a t2="%t1%"-"%t%"
  37. echo 用时0.%t2%秒
  38. echo.
  39. echo.
  40. echo.
  41. echo.
  42. echo 开始计算 1*1 用时如下:
  43. set t=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  44. for /l %%i in (1,1,10000) do set/a b=1*1
  45. set t1=%time:~0,2%%time:~3,2%%time:~-5,2%%time:~-2,2%
  46. set/a t2=%t1%-%t%
  47. echo 用时0.%t2%秒
  48. pause
  49. goto xx
复制代码
我的结果是10000次1*1在0.22秒左右,1234567*134567在0.26秒左右.
发现这个程序还可以用来测试当前计算机的运行能力,如果时间加长了一定有什么软件在占用内存呵!
希望能满意我的答复!

TOP

返回列表