llsheng_73 发表于 2014-5-24 04:28:16

这样的速度测试结果是不是很离谱?

本帖最后由 llsheng_73 于 2014-5-24 04:58 编辑

有人在百度知道上问怎么改图层颜色,他说用几十个(command"layer""c"色"层""")运行很慢
于是无聊进行了一下测试,感觉结果比较离谱,下边用了三种方法,一种是他的方法,我称为经典command语句(因为书上都这么教的这里鄙视一下写书的,总是教最不好用的)
第二种把command分开在循环内外,暂时称为优化command语句吧(很多时候都会这么做,显然已经跳出教材的圈子)
第三种当然是都知道的速度最快的entmod(这个速度最快但写起来它的组码比较烦)
虽然测试前对三种方法用时差异有个大概估计,但没想到的是结果让人很吃惊
(setq t1(getvar'date));;方法一,经典command语句
(repeat 5000
(command"layer""C"1 "0" ""))
(strcat"用时"(rtos(setq t1(-(getvar'date)t1)t1(* 86400.0 (- t1 (fix t1)))))"秒")
(setq t1(getvar'date));;方法二,优化command语句
(command"layer")
(repeat 5000
(command"C"1 "0"))
(command"")
(strcat"用时"(rtos(setq t1(-(getvar'date)t1)t1(* 86400.0 (- t1 (fix t1)))))"秒")
(setq b nil)
(repeat 5000
(setq b(cons(list"0" 1)b)a 0))
(setq t1(getvar'date));;方法三,entmod
(foreach x b
(entmod(setq a(entget(TBLOBJNAME"layer"(car x)))a(subst(cons 62(last x))(assoc 62 a)a)))
)
(strcat"用时"(rtos(setq t1(-(getvar'date)t1)t1(* 86400.0 (- t1 (fix t1)))))"秒")

下边是结果:
2.4568e+006
nil
"用时73.7510秒"
2.4568e+006
nil
nil
nil
"用时41.3760秒"
nil
0
2.4568e+006
((-1 . <图元名: 7ef7cc78>) (0 . "LAYER") (330 . <图元名: 7ef7cc10>) (5 . "F") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "0") (70 . 0) (62 . 1) (6 . "CONTINUOUS") (290 . 1) (370 . -3) (390 . <图元名: 7ef7e480>))
"用时1.2690秒"
你对上边这三个红色的数字作何感想呢?

lsjj 发表于 2014-5-24 07:09:09

本帖最后由 lsjj 于 2014-5-24 07:11 编辑

連測結果如下,真的很離譜

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.529秒"
"用時0.374秒"
"用時0.265秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.545秒"
"用時0.359秒"
"用時0.265秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.545秒"
"用時0.359秒"
"用時0.265秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.544秒"
"用時0.374秒"
"用時0.281秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.545秒"
"用時0.359秒"
"用時0.265秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時1.545秒"
"用時0.374秒"
"用時0.312秒"

指令:
指令: (LOAD "C:/Users/T420/Desktop/test.lsp")
"用時2.074秒"
"用時0.422秒"
"用時0.327秒"

ZZXXQQ 发表于 2014-5-24 08:09:08

再设(setvar "CMDECHO" 0)后试一下。
"用时15.8750秒"
"用时2.6880秒";关CMDECHO
"用时7.2970秒"
"用时0.9840秒";关CMDECHO
"用时0.4060秒"

q3_2006 发表于 2014-5-24 08:15:00

ZZXXQQ 发表于 2014-5-24 08:09 static/image/common/back.gif
再设(setvar "CMDECHO" 0)后试一下。
"用时15.8750秒"
"用时2.6880秒";关CMDECHO


(setvar "CMDECHO" 0)这个对速度影响大...很有体会....command .....跟猫老师学的变形....速度差距3位数以上...

Gu_xl 发表于 2014-5-24 08:21:18

学习都总是从command开始,直观容易!用command就不要考虑效率问题!要考虑效率问题,则尽量不要使用command,这是Lisp编程的一个基本原则!

xyp1964 发表于 2014-5-24 10:27:53

方法三应该把建表过程放到计时器内,否则有失公平……

yx5277 发表于 2014-11-16 12:31:53

用时3.922秒
用时1.391秒
用时0.5秒

加了一句(setvar "CMDECHO" 0)后:
用时3.891秒
用时1.375秒
用时0.5秒

变化不大啊
页: [1]
查看完整版本: 这样的速度测试结果是不是很离谱?