yanshengjiang 发表于 2025-2-20 10:15:41

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

本帖最后由 yanshengjiang 于 2025-2-20 15:09 编辑

;一百万条多段线改颜色测试时间

;下面耗时55s
(setqacdoc(vla-get-ActiveDocument (vlax-get-acad-object)))
(ssget)
(vlax-for reg (setq ss (vla-get-ActiveSelectionSet acdoc))
    (vla-put-color reg 3)
)

;下面耗时70s
(setq ss(ssget)
      i -1)
(while(setq e(ssname ss(setq i(1+ i))))
(vla-put-color (vlax-ename->vla-object e) 2)
)
)

;下面耗时105s
(setq ss(ssget)
      i -1)
(repeat(sslength ss)
(setq e(ssname ss(setq i(1+ i))))
(vla-put-color (vlax-ename->vla-object e) 1)
)


尘缘一生 发表于 2025-2-20 15:50:05

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

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

yanshengjiang 发表于 2025-2-20 16:07:33

尘缘一生 发表于 2025-2-20 15:50
(setqacdoc(vla-get-ActiveDocument (vlax-get-acad-object)))
全图代码是一类,虽然全图,但不需要 ...
都是SSGET的具体对象,一百万条多段线。   这个vl用的函数是vlax-for之前的选择集ActiveSelect,也不是文档的全部对象。

yanshengjiang 发表于 2025-2-20 15:13:28

本帖最后由 yanshengjiang 于 2025-2-20 15:15 编辑

尘缘一生 发表于 2025-2-20 12:54
应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。
大佬指点一下呢,这个范围我没看出来,我一直用repeat;P。
但是从程序的步骤上面看vl快好像也有道理。因为另外两个多了ssname和e2o的过程。

loveu515 发表于 2025-2-20 10:16:43

学习了{:1_1:}

llsheng_73 发表于 2025-2-20 11:09:01

这个测试不够严谨:首先是三次(ssget)人为参与的时间肯定会不一样,其次三次选择的实体个数也不一定相同

尘缘一生 发表于 2025-2-20 12:54:15

应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。

明_明 发表于 2025-2-20 13:23:50

好像有个大佬的帖子说while循环最快

yanshengjiang 发表于 2025-2-20 15:05:17

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

我这里测试的条件一样。一百万条多段线,不多不少。

yanshengjiang 发表于 2025-2-20 15:06:51

本帖最后由 yanshengjiang 于 2025-2-20 15:11 编辑

明_明 发表于 2025-2-20 13:23
好像有个大佬的帖子说while循环最快
我之前也听说了所以今天没事拿个一百万的数据做测试:lol   


无耐我用了十几年的repeat;P
页: [1] 2
查看完整版本: 没事水个贴: 对比vlax-for、repeat、while三种循环操作的速度