[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 zm900612 于 2011-4-22 16:16 编辑

cmd的cpu占用(低于百分五十)和内存占用(低于XXMB,具体值忘了)都是有上限的,无论用几G的内存都不可能超过那个值,题外话,我以前有过利用双cmd进程并行实现最大程度利用cpu的想法,但是当时背景不对,效果不显著。

TOP

我上个月做过一些关于效率的测试,原因不解释...部分结果如下:
1、正如楼主的结果证明的那样,存在大量变量时,读取变量的效率会极大地降低,不含变量时,命令效率不变。
2、单纯读取变量快于变量偏移,变量偏移快于变量替换,并且变量偏移的效率与偏移量关系不大

另外赠送两个:
3、外部命令启动速度都差不多,而不仅仅只有findstr慢,另外,文本写入速度与外部命令启动速度相当,读取速度的测试结果忘了
4、预处理!str!比%%a快

TOP

我们若为提高效率,记住这条实用的:

对数值的单一赋值,set 比set/a 快25%左右。
plp626 发表于 2011-4-22 18:18

这个没留意过,学习了

TOP

用1和10000来做对比测试不太严谨吧,因为字符长度会影响预处理耗时,不如改成类似10000和16383的数(十进制和二进制位数均相同)
plp626兄台的测试代码我有点看不懂啊,endlocal之后不是不存在刚刚制造饿垃圾变量了么?

TOP

题外话,好像本贴标题变了四五次了...

TOP

39# plp626


确实没怎么用过...
不过endlocal的基本作用我是知道的,它会清除最近一个setlocal后的所有变量改动,但是我对“栈内数据存储操作和不受栈外垃圾变量影响”这句不太理解,为什么说是栈外变量呢?“栈外”存在变量吗?那些变量不是应该被清空了吗?

TOP

@echo off&setlocal enabledelayedexpansion
set n=10000 1 39999
rem set n=39999 -1 10000
echo %time%开始%n%
for /l %%a in (%n%) do set #%%a=1
echo %time%赋值完成
for /l %%a in (%n%) do set a=!#1 ...
caruko 发表于 2011-4-23 08:37

%和!在for中的耗时明显不一样,一个语块只解释一次%str%,而!str!的解释次数与相应语句的执行次数成正比,假如在六千次循环中分别用%str%和!str!测试,!str!会比%str%多出5999次花在预处理中的耗时

TOP

奇怪,你们为什么就不用debug直接查询本地化变量在内存中的存储呢,很容易的事
hanyeguxing 发表于 2011-4-23 09:01

门外汉表示没学过...麻烦您教教呗

TOP

看了plp626老兄几次测试数据,百思不得其解为什么只要循环到变量名为_1n的时候,阶差会突然间低得可怜,居然还有负的...和_1完全不在一个档次上,这是什么原因呢?

TOP

75# hanyeguxing

原来如此,学习了。追问一下:“在DEBUG命令状态下查看环境,首先查看偏移量2C处的两个字节:”这里的2C是怎么的出来的呢?

TOP

89# applba


批处理存储在内存的变量是否有数据类型之分呢?这又是一个分歧点,有得闹了

TOP

人呢人呢?
这种版主级的舌战正是我所乐见的,向往了这么久,难得碰到一两次,怎么才讨论了一晚上+一上午就停火了...
问题还没解决呐...疑点还很多,举几个例子:
一、究竟是一张表还是N张表?子疑点:
1、系统变量与用户变量的关系,当用户变量覆盖系统变量时,系统变量去哪了?
2、setlocal后的变量是否和setlocal前的变量放在一张表里,并且一起按ansi排序呢?
二、变量存储时是否区分数据类型?
三、只感觉还有些问题迷迷糊糊,但没能抓住思绪,因此下文待续...

TOP

“在重新设定path后,debug命令变得无效。”
debug是外部命令,path变量一改变就找不到文件了

TOP

本帖最后由 zm900612 于 2011-4-23 15:05 编辑

99# plp626


我理解错了...而且初中高中的数学,我都没怎么听课,喜欢用自己的方法东拼西凑解题

98# batman


噢,怪不得,我还纳闷老兄怎么可能把这忘了


这话题越来越好玩了,斑竹们继续吵架,我是跑龙套的群众演员,等结果

TOP

那清空了本地化操作之后呢?命令解释器是再次复制系统变量进入本地吗?
还有setlocal呢?前后都是本地化操作,为什么endlocal之后能还原上一个setlocal之后的操作呢?

TOP

返回列表