找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1210|回复: 5

[每日一码] Lsp 搜索函数运行效率的比较

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2013-5-27 19:49:49 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 yxpxa 于 2013-5-27 19:58 编辑

看到大家在比较函数的运行效率,我也把前些天做的一个测试结果发出来。

;; Base64 解码时 LSP 函数运算效率的比较
;; 测试函数: assoc  vl-position  vl-string-search  vl-string-position
;; 测试数据: 将 base64码中 "Z" 和 "z" 转为 10 进制运行10万次的速度
(defun c:test()
(setq n 0)
;;base64 基础码
(setq Bs64 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
(setq Bs64s (mapcar 'chr (vl-string->list bs64)))  ;;vl-position 调用
(setq Bs64Ls (mapcar '(lambda(x)(cons x (setq n(1+ n)))) bs64s)) ;;assoc 调用

(setq nn 100000) ;;运行次数,相当于处理100kB的文件数据

;;一、assoc 函数运算
(setq st1 (getvar "date"))
(repeat nn
   (setq m1 (+ (cdr (assoc "Z" Bs64Ls)) (cdr (assoc "z" Bs64Ls))))
)
;;二、vl-position 函数运算
(setq st2 (getvar "date"))
(repeat nn
   (setq m2 (+ (vl-position "Z" Bs64s) (vl-position "z" Bs64s)))
)
;;三、vl-string-search 函数运算
(setq st3 (getvar "date"))
(repeat nn
   (setq m3 (+ (vl-string-search "Z" Bs64) (vl-string-search "z" Bs64)))
)
;;四、vl-string-position 函数运算
(setq st4 (getvar "date"))
(setq a1 (ascii "Z") a2 (ascii "z"))
(repeat nn
   (setq m4 (+ (vl-string-position a1 Bs64) (vl-string-position a2 Bs64)))
)
(setq st5 (getvar "date"))
;;运算结果比较
(setvar "DIMZIN" 1)
(princ (strcat "\nassoc              耗时: " (rtos (* 86400.0 (- st2 st1)) 2 4) " 秒"))
(princ (strcat "\nvl-position        耗时: " (rtos (* 86400.0 (- st3 st2)) 2 4) " 秒"))
(princ (strcat "\nvl-string-search   耗时: " (rtos (* 86400.0 (- st4 st3)) 2 4) " 秒"))
(princ (strcat "\nvl-string-position 耗时: " (rtos (* 86400.0 (- st5 st4)) 2 4) " 秒"))
(princ)
)
;|
不同版本R16/R17/R18的运算比较

;;AutoCAD 2004(R16)
assoc              耗时: 0.5310 秒
vl-position        耗时: 0.3910 秒
vl-string-search   耗时: 0.3120 秒
vl-string-position 耗时: 0.0940 秒

;;AutoCAD 2007(R17)
assoc              耗时: 0.7190 秒
vl-position        耗时: 0.4530 秒
vl-string-search   耗时: 0.1100 秒
vl-string-position 耗时: 0.0930 秒

;;AutoCAD 2012(R18)
assoc              耗时: 0.7190 秒
vl-position        耗时: 0.2810 秒
vl-string-search   耗时: 0.1250 秒
vl-string-position 耗时: 0.0940 秒

;;结论 vl-string-position 函数比较快,看来函数长度越长的函数运行速度越快啊^_^
|;
建议不同函数运算的速度比较越多越好,以便大家在写代码时有意识的选择执行效率高的函数。

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-27 21:15:48 | 显示全部楼层
楼主,ASSOC和VL-STRING-POSITION等不能一起测试吧,ASSOC主要用于关联表啊。哪个函数能替代它?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-27 23:21:16 | 显示全部楼层
Lispboy 发表于 2013-5-27 21:15
楼主,ASSOC和VL-STRING-POSITION等不能一起测试吧,ASSOC主要用于关联表啊。哪个函数能替代它?

是啊,但是在上面这个程序中,主要是用来搜索字母,并返回第二位元素的10进制数字。
不是说这个函数不好,而是这种搜索算法不行,因为多了两个 cdr 函数,所以慢了些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 19:57 , Processed in 0.367321 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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