马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
都听说是while 循环 比 repeat 循环效率高,今天测试下,让数据说话
 - (defun ss->ents1 (ss / i ents)
- (setq len (sslength ss)
- i -1
- )
- (repeat len
- (setq ents (cons (ssname ss (setq i (1+ i))) ents))
- )
- (reverse ents)
- )
- (defun ss->ents2 (ss)
- (setq n 0
- sL '()
- )
- (while (setq en (ssname ss n))
- (setq n (1+ n)
- sL (cons en sL)
- )
- )
- (reverse sl)
- )
- (defun c:tt ()
- (setq ss (ssget "x"))
- (setq aa (sslength ss))
- (setq ti1 0.0)
- (repeat 10
- (setq ti (car (_vl-times)))
- (setq a (ss->ents1 ss))
- (setq ti1 (+ ti1 (/ (- (car (_vl-times)) ti) 1000.0)))
- )
- (prompt
- (strcat "\n实体数:"
- (itoa aa)
- "方法1...10次平均时间 : "
- (rtos (/ ti1 10.0) 2 50)
- )
- )
- (setq ti1 0.0)
- (repeat 10
- (setq ti (car (_vl-times)))
- (setq a (ss->ents2 ss))
- (setq ti1 (+ ti1 (/ (- (car (_vl-times)) ti) 1000.0)))
- )
- (prompt
- (strcat "\n实体数:"
- (itoa aa)
- "方法2...10次平均时间 : "
- (rtos (/ ti1 10.0) 2 50)
- )
- )
- (princ)
- )
上面代码, ss->ents1、ss->ents2分别是用repeat 循环和while循环遍历选择集获取实体表。
测试18万个实体选择集,循环10次,求出平均时间
命令: tt
实体数:180000方法1...10次平均时间 : 0.07189999999999998
实体数:180000方法2...10次平均时间 : 0.04689999999999999
命令:
命令: tt
实体数:180000方法1...10次平均时间 : 0.0687
实体数:180000方法2...10次平均时间 : 0.04849999999999999
命令:
命令: tt
实体数:180000方法1...10次平均时间 : 0.07030000000000001
实体数:180000方法2...10次平均时间 : 0.04379999999999999
可见,while循环比repeat循环提高了快一倍的时间,效率还是高出很多的,大家以后写代码知道用什么了吧,你可能反复的优化代码改进了那么几秒时间,可能改进一个repeat循环就能省出几十秒的时间。
|