[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
你这样,应该还有很多CALL的耗时在内。

TOP

50# batman


似乎,只1位的数字,耗时都会相对减少,预处理的原因?

TOP

57# hanyeguxing


从你的代码来看,假如CMD预处理时只取一次变量因为是%%而不是!!,而其中变量 a 是排在最后的,所以每次搜索到"a", 也必然搜索到了前面的#数字变量。
那么花的时候必然相同。
或许使用!!试一试会不一样。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=10000 1 39999
  3. rem set n=39999 -1 10000
  4. echo %time%开始%n%
  5. for /l %%a in (%n%) do set #%%a=1
  6. echo %time%赋值完成
  7. for /l %%a in (%n%) do set a=!#10000!
  8. echo %time%第一批完成
  9. for /l %%a in (%n%) do set a=!#39999!
  10. echo %time%第二批完成
  11. pause
复制代码
电脑太废...看结果
  1. 8:32:28.14开始10000 1 39999
  2. 8:33:11.32赋值完成
  3. 8:34:32.75第一批完成
  4. 8:36:49.43第二批完成
  5. 请按任意键继续. . .
复制代码

TOP

本帖最后由 caruko 于 2011-4-23 08:57 编辑

如果以上成立的话,那么以后写代码,在大量变量存在的空间,能不用!!就尽量不用了。

还有,hanyeguxin 如果你的逐字搜索来说,那么 set _10000 比set _9 快 无法解释。
而且set _x 比所有 _number 慢也无法解释。

逐字搜索,需要类似数据库映射表,这样才会加快速度。但 set _10000 比 set _9 快很多,可见不成立。
而如果搜索一个单字符,也是遍历进行的,那么假如变量字符很长,需要搜索的次数反而应该大大增加吧?

TOP

69# zm900612


不错,因为 set /a =%#39999% 这一句,在预处理 a 变量时,搜索指针就已经经过了 #39999 变量,一次预处理得到了a,#399992个值,所以实际耗时就是一次取值 "a "的耗时。
所以hanyeguxin的代码才没有测试出差距。

TOP

果然是 变量名+值 都一起以字符存储的。
难怪 set a=1 比 set /a a=1要快。

这种存储法,自由度不错,某种程度上方便了用户,但效率就低了。

TOP

返回列表