明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 360|回复: 14

[讨论] 没事水个贴: 对比vlax-for、repeat、while三种循环操作的速度

  [复制链接]
发表于 昨天 10:15 | 显示全部楼层 |阅读模式
本帖最后由 yanshengjiang 于 2025-2-20 15:09 编辑
  1. ;一百万条多段线改颜色测试时间

  2. ;下面耗时55s
  3. (setq  acdoc  (vla-get-ActiveDocument (vlax-get-acad-object)))
  4. (ssget)
  5. (vlax-for reg (setq ss (vla-get-ActiveSelectionSet acdoc))
  6.     (vla-put-color reg 3)
  7. )

  8. ;下面耗时70s
  9. (setq ss(ssget)
  10.       i -1)
  11. (while(setq e(ssname ss(setq i(1+ i))))
  12.   (vla-put-color (vlax-ename->vla-object e) 2)
  13.   )
  14. )

  15. ;下面耗时105s
  16. (setq ss(ssget)
  17.       i -1)
  18. (repeat(sslength ss)
  19.   (setq e(ssname ss(setq i(1+ i))))
  20.   (vla-put-color (vlax-ename->vla-object e) 1)
  21.   )


"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 昨天 15:50 | 显示全部楼层
yanshengjiang 发表于 2025-2-20 15:13
大佬指点一下呢,这个范围我没看出来,我一直用repeat。  
但是从程序的步骤上面看vl快好像也有道理。 ...

(setq  acdoc  (vla-get-ActiveDocument (vlax-get-acad-object)))
全图代码是一类,虽然全图,但不需要转换
下面2段代码
(vla-put-color (vlax-ename->vla-object e) 2) 进行了转换,虽然可能你SSGET的也是全图,但选择越多,越比第一个慢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 16:07 | 显示全部楼层
尘缘一生 发表于 2025-2-20 15:50
(setq  acdoc  (vla-get-ActiveDocument (vlax-get-acad-object)))
全图代码是一类,虽然全图,但不需要 ...

都是SSGET的具体对象,一百万条多段线。   这个vl用的函数是vlax-for之前的选择集ActiveSelect,也不是文档的全部对象。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 15:13 | 显示全部楼层
本帖最后由 yanshengjiang 于 2025-2-20 15:15 编辑
尘缘一生 发表于 2025-2-20 12:54
应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。

大佬指点一下呢,这个范围我没看出来,我一直用repeat。  
但是从程序的步骤上面看vl快好像也有道理。因为另外两个多了ssname和e2o的过程。
回复 支持 反对

使用道具 举报

发表于 昨天 11:09 | 显示全部楼层
这个测试不够严谨:首先是三次(ssget)人为参与的时间肯定会不一样,其次三次选择的实体个数也不一定相同
回复 支持 反对

使用道具 举报

发表于 昨天 12:54 | 显示全部楼层
应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。
回复 支持 反对

使用道具 举报

发表于 昨天 13:23 | 显示全部楼层
好像有个大佬的帖子说while循环最快
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 15:05 | 显示全部楼层
llsheng_73 发表于 2025-2-20 11:09
这个测试不够严谨:首先是三次(ssget)人为参与的时间肯定会不一样,其次三次选择的实体个数也不一定相同

我这里测试的条件一样。一百万条多段线,不多不少。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 15:06 | 显示全部楼层
本帖最后由 yanshengjiang 于 2025-2-20 15:11 编辑
明_明 发表于 2025-2-20 13:23
好像有个大佬的帖子说while循环最快

我之前也听说了  所以今天没事拿个一百万的数据做测试   


无耐我用了十几年的repeat
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-21 21:23 , Processed in 0.170118 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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