明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1999|回复: 9

[经验] 三种关闭打开某图层的方法,各执行1万次的结果

  [复制链接]
发表于 2019-10-2 11:07:52 | 显示全部楼层 |阅读模式
今天学习了三种关闭、打开某图层的方法,于是各执行1万次,看看到底哪种更快。
第一种,用时59.586秒
  • (defun c:tt3(/ t0 t1 time)
  •   (setvar "CMDECHO" 0)
  •   (setq t0 (* 86400 (getvar "tdusrtimer")) )
  •   (repeat 10000
  •   (command "layer" "off" "2制图_窗型" "")
  •   (command "layer" "on" "2制图_窗型" "")
  •   )
  •   (setq t1 (* 86400 (getvar "tdusrtimer")) )
  •   (setq time (- t1 t0))
  •   (print time)
  •   (princ)
  • )



第二种,用时1.196秒
  • (defun c:tt2(/ t0 t1 time data dxf62 )
  •   (setq t0 (* 86400 (getvar "tdusrtimer")) )
  •   (repeat 10000
  •   (setq data (entget(tblobjname "layer" "2制图_窗型")))
  •   (setq dxf62 (cdr (assoc 62 data)));查询图层开/关变量值
  •   (setq data (entmod (subst (cons 62 (- dxf62))(assoc 62 data) data)));关闭图层
  •   (setq data (entmod (subst (cons 62 dxf62)(assoc 62 data) data)));打开图层
  •   )
  •   (setq t1 (* 86400 (getvar "tdusrtimer")) )
  •   (setq time (- t1 t0))
  •   (print time)
  •   (princ)
  • )



第三种,用时1.022秒。
  • (defun c:tt1(/ t0 t1 time Ob-layer)
  •   (setq t0 (* 86400 (getvar "tdusrtimer")) )
  •   (repeat  10000
  •   (setq Ob-layer (vlax-ename->vla-object(tblobjname "layer" "2制图_窗型"))  )
  •   (vla-put-LayerOn Ob-layer :vlax-false)  ;关闭图层
  •   (vla-put-LayerOn Ob-layer :vlax-true)    ;打开图层
  •   )
  •   (setq t1 (* 86400 (getvar "tdusrtimer")) )
  •   (setq time (- t1 t0))
  •   (print time)
  •   (princ)
  • )



还是有点意思的。
发表于 2019-10-2 22:27:00 来自手机 | 显示全部楼层
要真正进行速度测试   不能简单的一个图层开关一万次   而是建立100个图层   每个图层里放置1000个相同的图元   再把代码做到完善  最后再进行测试
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-2 12:23:31 | 显示全部楼层
老前辈有叮咛
command 调用耗时 能不用就别用
发表于 2019-10-2 22:21:39 来自手机 | 显示全部楼层
不能简单的说command耗时   command命令在运行时其实考虑了很多后续处理   比如说   你用vlax控制图层以后  注意一下工具条里的状态是没有变化的  所以楼上的vlax代码   相比一个完整的运行过程   其实少了很多步骤   所以才会显得快很多
发表于 2019-10-3 18:40:10 | 显示全部楼层
调用command大部分都会比较慢,原则上entmod会更快一些,你的测试时间可能有点问题,vlax次之,command最慢.
发表于 2019-10-6 23:17:06 | 显示全部楼层
请教大侠用  用第三种办法 关图层 怎么样设置支持通配符图层 如*text*
发表于 2019-10-9 09:33:21 | 显示全部楼层
学习了,谢谢楼主分享
发表于 2019-10-10 23:01:47 | 显示全部楼层
第三种,用时1.022秒。
(defun c:tt1(/ t0 t1 time Ob-layer)
  (setq t0 (* 86400 (getvar "tdusrtimer")) )
  (repeat  10000
  (setq Ob-layer (vlax-ename->vla-object(tblobjname "layer" "2制图_窗型"))  )
  (vla-put-LayerOn Ob-layer :vlax-false)  ;关闭图层
  (vla-put-LayerOn Ob-layer :vlax-true)    ;打开图层
  )
  (setq t1 (* 86400 (getvar "tdusrtimer")) )
  (setq time (- t1 t0))
  (print time)
  (princ)
)


大神 请教 怎么样参照这个方法关闭多个图层  如text1  text2  text3   1clou1  2clou2
是否可以支持通配符  如*text*   *clou*
发表于 2024-1-29 16:45:52 | 显示全部楼层
觉得最慢comman<vl-cmdf<entmod<vlax最快。cad版本越高越明显。
就算最慢comman开关多个图层几次时间也是很少很少忽略不计。
不过在不影响速度情况下尽量用command会好用的。
发表于 2024-1-29 23:16:37 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 23:46 , Processed in 0.180234 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表