本帖最后由 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秒"
你对上边这三个红色的数字作何感想呢? |