找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2415|回复: 7

[原创]函数ssget的速度优化测试

[复制链接]
发表于 2005-12-11 21:45:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<P><FONT face=Verdana>本文对ssget的几个选癫问方法进行了测?lt;BR>要求:选择指定的坐标范围内的物体.<BR>根据使用的选择方法不同而得到不同的响应时间.<BR>结论如下:<BR>1.采用先选择后过滤(s1,s2,s3这三个函数):这种方法的速度取决于一次所能选择到的物体的个数:<BR>在估计能选择到的物体小于1000个的时候是有优势的,超过这个数以后,就很慢了.<BR>2.采用选择过滤器中的坐标过滤功能(s4):这种方法的速度取决于文件的大小,<BR>当文件很小时,速度是最快的,当文件有点大的时候,速度是最慢的<BR>3.程序中如果有大量的选择操作时,不防先判断一下文件大小,以及估计一下选择集的大小,以考滤采用何种选择过滤方式</FONT></P><FONT face=Verdana>
<P><BR>新建一个文件下的测试数据:<BR>100个圆:<BR>函数:#&lt;USUBR @04b1e118 S1&gt;测试结果00:00:00:341<BR>函数:#&lt;USUBR @04b1e140 S2&gt;测试结果00:00:00:250<BR>函数:#&lt;USUBR @04b1e168 S3&gt;测试结果00:00:00:280<BR>函数:#&lt;USUBR @04b1e190 S4&gt;测试结果00:00:00:029<BR>500个圆:<BR>函数:#&lt;USUBR @04b1e118 S1&gt;测试结果00:00:00:782<BR>函数:#&lt;USUBR @04b1e140 S2&gt;测试结果00:00:00:630<BR>函数:#&lt;USUBR @04b1e168 S3&gt;测试结果00:00:00:640<BR>函数:#&lt;USUBR @04b1e190 S4&gt;测试结果00:00:00:070<BR>1000个圆:<BR>函数:#&lt;USUBR @04b1e118 S1&gt;测试结果00:00:01:752<BR>函数:#&lt;USUBR @04b1e140 S2&gt;测试结果00:00:01:571<BR>函数:#&lt;USUBR @04b1e168 S3&gt;测试结果00:00:01:512<BR>函数:#&lt;USUBR @04b1e190 S4&gt;测试结果00:00:00:130</P>
<P>原来一个13M的图形下的测试数据:<BR>100个圆<BR>函数:#&lt;USUBR @04a2dc80 S1&gt;测试结果00:00:00:169<BR>函数:#&lt;USUBR @04a2dcbc S2&gt;测试结果00:00:00:230<BR>函数:#&lt;USUBR @04a2dcf8 S3&gt;测试结果00:00:00:150<BR>函数:#&lt;USUBR @04a2dd48 S4&gt;测试结果00:00:02:152</P>
<P>500个圆:<BR>函数:#&lt;USUBR @04a2dc80 S1&gt;测试结果00:00:00:841<BR>函数:#&lt;USUBR @04a2dcbc S2&gt;测试结果00:00:00:730<BR>函数:#&lt;USUBR @04a2dcf8 S3&gt;测试结果00:00:00:671<BR>函数:#&lt;USUBR @04a2dd48 S4&gt;测试结果00:00:02:302</P>
<P>1000个圆:<BR>函数:#&lt;USUBR @04a2dc80 S1&gt;测试结果00:00:01:821<BR>函数:#&lt;USUBR @04a2dcbc S2&gt;测试结果00:00:01:542<BR>函数:#&lt;USUBR @04a2dcf8 S3&gt;测试结果00:00:01:251<BR>函数:#&lt;USUBR @04a2dd48 S4&gt;测试结果00:00:02:253</P>
<P>&nbsp;</P>
<P>


  1. ;;;VisualLisp函数测试 1

  2. (defun c:tt ()
  3.   (setvar "cmdecho" 0)
  4.   (setq re_times 10)
  5.   (setq funlist (list s1 s2 s3 s4))
  6.   ;(setq testlist (list 1111 2222 3333 4444 5555 6666 7777 8888 9999))
  7.   (setq        pt1 (list 0 0 0)
  8.         pt2 (list 0 2000 0)
  9.         pt3 (list 2000 2000 0)
  10.         pt4 (list 2000 0 0)
  11.   )
  12.   (repeat 100 (addcircle));每次增加100圆,对于s1,s2,s3这三个方法影响大,对s4影响不大
  13.   (foreach fun funlist
  14.     (progn
  15.       (setq t1 (getvar "date")) ;_记录开始时间t1
  16.       (repeat re_times
  17.         (fun)
  18.       ) ;_repeat
  19.       (setq t2 (getvar "date")) ;_记录结束时间t2
  20.       (princ "函数:")(princ fun)(princ "测试结果")
  21.       (princ (menucmd (strcat "M=$(edtime," (rtos (- t2 t1) 2 16) ",HH:MM:SS:MSEC)")))
  22.       (princ "\n")
  23.     ) ;_progn

  24.   ) ;_foreach
  25.   (setvar "cmdecho" 1)
  26.   (princ)
  27. )
  28. (defun s1()
  29. (setq ss(ssget "F"           (list pt1 pt2)
  30.                    (list (cons 0 "CIRCLE")))
  31.   )
  32.   (ss_filter ss)
  33.   (setq ss nil)
  34.   )
  35. (defun s2()
  36. (setq ss (ssget "CP"  (list pt1 pt2 pt3 pt4)
  37.                    (list (cons 0 "CIRCLE")))
  38.   )
  39.   (ss_filter ss)
  40.   (setq ss nil)
  41.   )
  42. (defun s3()
  43. (setq ss(ssget "C"  pt1 pt3
  44.                    (list (cons 0 "CIRCLE")))
  45.   )
  46.   (ss_filter ss)
  47.   (setq ss nil)
  48.   )
  49. (defun s4();_这个函数是最慢的!
  50. (setq ss(ssget        "X"
  51.                 (list (cons -4 "&ltAND")
  52.                       (cons 0 "CIRCLE")
  53.                       (cons -4 "&gt=,&gt=,*")
  54.                       (list 10 -1 -1 0)
  55.                       (cons -4 "&lt=,&lt=,*")
  56.                       (list 10 1 1 0)
  57.                       (cons -4 "AND&gt")
  58.                 )
  59.          )
  60.   )
  61.   (setq ss nil)
  62.   )
  63. (defun ss_filter(ss)
  64.    (setq i% 0)
  65.    (repeat (sslength ss)
  66.      (progn
  67.        (setq sn (ssname ss i%))
  68.        (setq ent(entget sn))
  69.        (setq ptmid (assoc 10 ent))
  70.        (setq xmid (cadr ptmid))
  71.        (setq ymid (cadr ptmid))
  72.        (if (or (&gt xmid 1 ) (&gt ymid 1) (&lt xmid -1) (&lt ymid -1) ) (setq ss(ssdel en ss )) )

  73.        (setq i% (1+ i%))
  74.        );_progn
  75.      
  76.      );_repeat

  77.   ss
  78.   )
  79. (defun addcircle ()
  80. (command "circle" (list 0 0 0) 1000 )
  81.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-12 19:01:04 | 显示全部楼层
樓主你研究的很深入, 好少人有空余時間來研究這些的了, 你的研究讓我多加了解了SSGET. 呵呵. 這個是寫LISP來處理對象最常用的了, 不過我一直以為程序的快慢不在乎這個涵數, 呵呵.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-12 22:05:53 | 显示全部楼层
其实是因为我写的一个程序实在是太慢了
所以没法,中间设了好多记录时间的,才找到原来这个函数是这么的慢!
仔细研究了一下,公布出来,大家就不要再花时间了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-13 12:15:40 | 显示全部楼层
你的研究很有意义,在编程时不但要选择最好的算法,同时还要考虑系统中函数的特点性能。
你的代码我收藏学习,特别是
(setq funlist (list s1 s2 s3 s4))

(foreach fun funlist
  :  :
        (fun)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-17 16:50:37 | 显示全部楼层
不错! 选择集确实很慢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-18 09:22:43 | 显示全部楼层
收集。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-2 12:10:06 | 显示全部楼层
感谢楼主,我也遇到了这个问题,选择好慢啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-3 18:24:45 | 显示全部楼层
感谢分享,期望自己早日升级
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 09:15 , Processed in 0.197946 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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