- 帖子
- 675
- 积分
- 3226
- 技术
- 75
- 捐助
- 101
- 注册时间
- 2009-4-10
|
2楼
发表于 2009-5-10 23:25
| 只看该作者
(接一楼)
5. Goto 标号为什么慢呢? 看:
goto :next 0.27毫秒 (并不慢)
:next
其实,单个goto 的速度并不是很慢,慢的原因是goto :标号和标号间不支持组合,
也就是每行组指令最少也要0.20毫秒以上。所以通常不应该用goto :标号 来构造循环体,
如果一定要这样时,应该把循环体内的多行,用()或用 “&”进行组合来减少行数。
通常只用在分支,或跳出for 循环。如果不得不用到时,最好用for来辅助以减少循环次数。
6. 注释与也与速度有关吗?
注释方法有两种.
::号
当发现这以用这种方法后,绝大多数人都喜欢上这种方法,因为觉得它基本上不耗时,
其实并非这样,在运行过程中,系统遇到时相当于处理标号一样的时间:0.05毫秒,
其实只要是一行,就算是空行也要0.05毫秒的时间,也就是基本不用时间。
缺点是不能用在命令行后。也不能用在分组()内
Rem
按道理没有进行作何操作,应该不耗时才对,可是并非如此,单独一行rem要用0.19毫秒,
可见它没有 ::注释高效,是否rem该退休了呢?不,实际并非如此,因为它可以用在行后,
和分组()内,这时它的速度到了0.01~0.02毫秒,这是好多人没有想到的。
7. 外部命令和三方软件的效率问题,文件大少对用时在cmd下相差不是很大,主要是路径的问题,
以直接指明路径最快,在当前路为次,最慢是在%path%路径的最后。三方软件的调用速度是很慢的,
最快操作单个也要12.25毫秒,所以要用到三方的话,尽量在1到3次内完成,不要多次调用三方和外部命令,
特别是不能用在循环体内,除非不得已。这也就是为什么我不想用三方来做界面的原因。
8. 行长与速度,每长30个字符要多用0.01毫秒,因为批处理是一边运行一边解释的,
所以字符串的长短与时间也是有关的。最好是变量名的定义只能要方便看懂,越短越好。
附:(本人对一些命令实测效率,运行1000次所用毫秒数,测试工具请在一楼附件下载)
命令 运行次数 用时(毫秒)
cd.
=== 1000 161
echo.
=== 1000 158
echo.>nul
=== 1000 161
echo.aa>nul
=== 1000 182
echo dd>nul
=== 1000 30
::dir
=== 1000 5
rem dir
=== 1000 19
set aa=aa
=== 1000 21
set /a aa=1
=== 1000 25
set aa=^(3+3^)*1
=== 1000 24
set /a aa=8^^3
=== 1000 25
for /l %%a in (1,1,10) do rem dir
=== 1000 30
for /l %%a in (1,1,100) do set aa=aa
=== 1000 193
for /l %%a in (1,1,10) do set aa=aa
=== 1000 46
if 22==aaa rem dd
=== 1000 21
if 22==aaa set aa=aa
〈〈数据未完,详请看附件〉〉
[ 本帖最后由 netbenton 于 2009-5-11 12:32 编辑 ] |
-
1
评分人数
-
|