找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1162|回复: 8

[日积月累]:cons与append的效率测试...

[复制链接]
发表于 2002-9-10 22:52:41 | 显示全部楼层 |阅读模式

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

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

×
【实验目的】测试 函数 CONS 和 APPEND 建表的效率差别

【测试环境】ACAD、晓东工具箱环境

【测试过程】分别用CONS、REVERSE和APPEND、LIST组合,循环1000次,获得一个字符串的每个字符到一个表中。

【测试程序】如下:


  1. [FONT=courier new]
  2. (defun c:test1 (/ str cha el t1 t2)
  3.   (setq t1 (getvar "date"))
  4.   (repeat 1000
  5.     (setq str "建筑CAD技术")
  6.     ($XDLSP_Text_ToDb str)
  7.     (while (setq cha ($XDLSP_Text_GetWord))
  8. [color=red]     (setq el (cons cha el))[/color]
  9.     )
  10. [color=red]   (setq el (reverse el))[/color]
  11.   )
  12.   (setq t2 (getvar "date"))
  13.   (- t2 t1)
  14. )

  15. (defun c:test2 (/ str cha el t1 t2)
  16.   (setq t1 (getvar "date"))
  17.   (repeat 1000
  18.     (setq str "建筑CAD技术")
  19.     ($XDLSP_Text_ToDb str)
  20.     (while (setq cha ($XDLSP_Text_GetWord))
  21. [color=red]      (setq el (append el (list cha)))[/color]
  22.     )
  23.   )
  24.   (setq t2 (getvar "date"))
  25.   (- t2 t1)
  26. )[/FONT]


结果:
Command: test1
3.5116e-005

Command:
Command: test2
0.000169225

【实验结论】在1000次很少的循环下,两个时间的差别是一个数量级,如果循环次数更多,差别将要更大。

【秋枫分析】ACAD使用的是双向链表结构,CONS仅仅需要在表头插入一个节点,就需要一个指针改向操作,REVERSE反向,因为是双向链表,所以也很快。还有CONS和APPEND使用的内存结构不同,CONS需要3个字节,而APPEND需要四个字节。

【秋枫推荐】在使用表的时候,大家尽量使用CONS构建表,最后用REVERSE把表反序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-9-10 23:55:50 | 显示全部楼层
qf的工作很细致啊。说实话,建表我都用的append,因为好写,没想到
啊没想到。。。。:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-9-11 20:16:43 | 显示全部楼层
我也是啊。所以我看到xd这么写很奇怪,于是测试了一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-11 21:09:49 | 显示全部楼层
还发现xd什么异常之处?
大家来把脉。:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-16 22:15:44 | 显示全部楼层
最初由 aeo 发布
[B]那几个表相加,还用cons ? 用cons试一试,试过没? [/B]


"还用cons ? 用cons试一试"

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

使用道具 举报

发表于 2002-9-23 21:25:58 | 显示全部楼层
使用REPEAT 和nth结合的语句 与使用FOREACH处理的效率相差更大
我处理10万个实体 前者用了几分钟 后者是几秒
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-10-12 18:15:30 | 显示全部楼层
我的意思是
1.  (setq li3(append li1 li2))
2. (setq li1(reverse li1))
    (setq li3(reverse (foreach x li2(cons x li1)) ))
哪个快
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 22:32 , Processed in 0.358089 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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