没事水个贴: 对比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)
)
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的也是全图,但选择越多,越比第一个慢。 尘缘一生 发表于 2025-2-20 15:50
(setqacdoc(vla-get-ActiveDocument (vlax-get-acad-object)))
全图代码是一类,虽然全图,但不需要 ...
都是SSGET的具体对象,一百万条多段线。 这个vl用的函数是vlax-for之前的选择集ActiveSelect,也不是文档的全部对象。 本帖最后由 yanshengjiang 于 2025-2-20 15:15 编辑
尘缘一生 发表于 2025-2-20 12:54
应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。
大佬指点一下呢,这个范围我没看出来,我一直用repeat;P。
但是从程序的步骤上面看vl快好像也有道理。因为另外两个多了ssname和e2o的过程。
学习了{:1_1:} 这个测试不够严谨:首先是三次(ssget)人为参与的时间肯定会不一样,其次三次选择的实体个数也不一定相同 应该是 vlax-for 最慢,之所以第一段快,是因为与下面代码不在一个范围上。
好像有个大佬的帖子说while循环最快 llsheng_73 发表于 2025-2-20 11:09
这个测试不够严谨:首先是三次(ssget)人为参与的时间肯定会不一样,其次三次选择的实体个数也不一定相同
我这里测试的条件一样。一百万条多段线,不多不少。 本帖最后由 yanshengjiang 于 2025-2-20 15:11 编辑
明_明 发表于 2025-2-20 13:23
好像有个大佬的帖子说while循环最快
我之前也听说了所以今天没事拿个一百万的数据做测试:lol
无耐我用了十几年的repeat;P
页:
[1]
2