已解决 if $a<>'' then 与 if StringLen($a) then 哪个效率高?
本帖最后由 Qokelate 于 2012-4-7 16:35 编辑如题,突然关注Au3的内部处理问题,认为是无事找事的请口下留情,我只是想知道Au3的处理机制,呵呵
答案见6楼 我对这个就没多大兴趣了,建议楼主用For....Next循环10W次看看哪个效率都高,等你的消息{:face (356):} 本帖最后由 zch11230 于 2012-4-6 19:53 编辑
感觉<>应该快一些给你一张报纸 问你上面有字没有 马上就知道 “有!”有多少个 。。。。晚上回去试试看。
试了StringLen快一些 但是非常小的区别循环了500W次 快了0.3秒。 本帖最后由 Qokelate 于 2012-4-7 02:06 编辑
回复 3# zch11230
我在想,Au3内部处理 <> 的时候是不是就直接是Stringlen方法!!
因为空字符串返回的长度是空!!不是0!! 这说明可以很方便的进行位比较!
而判断是否为空的很简单的方法就是判断占用内存位置为空! if stringlen($a) then ..好像需要2个步骤,先获长度,再判断真假
if $a<>"" then好像是一个步骤
上面只是个人见解 楼主兄既然注重效率,为何不拿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)慢很多,这只能解释为因为脚本语言的特殊。 一样一样的啊
页:
[1]