找回密码
 加入
搜索
查看: 2324|回复: 7

[AU3基础] 已解决 if $a<>'' then 与 if StringLen($a) then 哪个效率高?

  [复制链接]
发表于 2012-4-6 00:19:44 | 显示全部楼层 |阅读模式
本帖最后由 Qokelate 于 2012-4-7 16:35 编辑

如题,突然关注Au3的内部处理问题,认为是无事找事的请口下留情,我只是想知道Au3的处理机制,呵呵


答案见6楼

评分

参与人数 1金钱 +10 收起 理由
3mile + 10 好问题

查看全部评分

发表于 2012-4-6 01:30:03 | 显示全部楼层
我对这个就没多大兴趣了,建议楼主用For....Next循环10W次看看哪个效率都高,等你的消息
发表于 2012-4-6 12:13:56 | 显示全部楼层
本帖最后由 zch11230 于 2012-4-6 19:53 编辑

感觉<>应该快一些  给你一张报纸 问你上面有字没有 马上就知道 “有!”  有多少个 。。。。晚上回去试试看。

试了  StringLen快一些 但是非常小的区别  循环了500W次 快了0.3秒。
 楼主| 发表于 2012-4-7 02:04:42 | 显示全部楼层
本帖最后由 Qokelate 于 2012-4-7 02:06 编辑

回复 3# zch11230


    我在想,Au3内部处理 <> 的时候  是不是就直接是Stringlen方法!!

因为空字符串返回的长度是空!!不是0!!   这说明可以很方便的进行位比较!

而判断是否为空的很简单的方法就是判断占用内存位置为空!
发表于 2012-4-7 05:39:28 | 显示全部楼层
if stringlen($a) then ..好像需要2个步骤,先获长度,再判断真假
if $a<>"" then好像是一个步骤

上面只是个人见解
发表于 2012-4-7 06:23:17 | 显示全部楼层
楼主兄既然注重效率,为何不拿if $a 和if StringLen($a)作比较呢? 当$a值为数字0时,显然if $a、if $a <> "",与if StringLen($a)的结果不一样,使用前两种写法就很不严谨,虽然第一种写法比后两种写法效率快很多。如果注重效率,就要注意变量类型,尤其在写UDF函数时,要明确规定变量必须是用引号括合起来的字符串,如果函数因指定了错误类型的变量而执行异常,那是调用方的问题,而不是UDF作者的问题。
另外,判断变量是否为NULL,if not ($a == "")与if StringLen($a)效果一样,但前者效率低。但在最终编译为机器码的语言中并不是这样,在这些编程语言当中,前者最多需要4次运算,时间复杂度是o(1),而后者的运算次数则取决于字符串的实际长度,复杂度是o(n),因为不管哪种语言,StringLen内部的工作原理就是扫描字符串中的每个字符,直到遇到0字符才终止。if not ($a == "")竟然比if StringLen($a)慢很多,这只能解释为因为脚本语言的特殊。

评分

参与人数 2金钱 +50 贡献 +5 收起 理由
afan + 50 学习了
3mile + 5 学习了

查看全部评分

发表于 2012-4-7 09:26:52 | 显示全部楼层
一样一样的啊
发表于 2012-4-15 17:27:50 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 00:05 , Processed in 0.116975 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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