找回密码
 加入
搜索
查看: 11250|回复: 21

[效率算法] [已解决]关于AU3两种加法的效率??

 火.. [复制链接]
发表于 2011-6-3 15:45:53 | 显示全部楼层 |阅读模式
本帖最后由 annybaby 于 2011-6-16 22:43 编辑

$count+=1和$count=$count+1相差是相当的大,进行了10000000次的加法运算,前者的自增方式用了8秒,几乎比后者(12秒)快了三分之一!!


Local $count=0
$time=TimerInit()
While $count<10000000
        $count+=1
WEnd
MsgBox(0,'','用时:'&TimerDiff($time))









当然,这个速度并不能用来评价AU3进行数学运算的能力,只是想进行一个简单的探讨,因为用FOR 循环来测试时,速度远远快于while循环(2.7秒左右,速度提高三倍),原因估计是因为while需要每次都判断,而FOR不需要~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +10 收起 理由
tryhi + 10

查看全部评分

发表于 2011-6-3 16:37:36 | 显示全部楼层
假设count变量的地址为p。

count += 1 转换成汇编语言应该是:
add dword ptr [p], 1 ; 直接对p地址中的数值加1。


count = count + 1 则是:
mov eax, dword ptr [p] ; 将p地址中的数值放入eax寄存器中。
add eax, 1 ; eax加1。
mov dword ptr [p], eax ; 将eax的新值放入p地址中。


在C中是这样的。虽然只有一条C指令,但转换成最终的机器指令,是一句与三句的区别。虽然一句、三句、几十句或上百句都可以在一个时钟周期内完成,但相同的运算多了就会非常影响效率。

而Au3是脚本,Au3代码最终不会转换成机器指令,在Au3中,如果要完成一次完整的、给变量赋值的操作,不会像上面那样只有几句机器指令,而是十几句或几十句,不同的语句写法,在解释器内部所执行的运算都不会相同。在论坛中时常看到写第二种写法的人,不能合理使用各种语句,正是提升程序效率的最大障碍。

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
tryhi + 20 + 5 佩服P版,又学习了

查看全部评分

发表于 2011-6-3 19:13:00 | 显示全部楼层
哇塞,小弟真是受益匪浅~能从p版学习不少东西
 楼主| 发表于 2011-6-3 21:06:07 | 显示全部楼层
回复 2# pusofalse


    P版就是强大,学习了~~
发表于 2011-6-3 21:32:47 | 显示全部楼层
本帖最后由 蜘蛛抱蛋 于 2011-6-3 21:39 编辑

曾经在图书馆看到一本《编程卓越之道 第二卷:运用底层语言思想编写高级语言代码》楼主如果有机会扫扫,定会获益匪浅
补充一点点
在判断语句为连续的数值用switch比IF嵌套要好,case语句应该将最可能匹配的条件放在最上面,因为执行时如果遇到匹配的子语句就会跳出判断
 楼主| 发表于 2011-6-3 21:37:32 | 显示全部楼层
回复 5# 蜘蛛抱蛋

谢谢介绍,呵呵...
发表于 2011-6-4 01:26:56 | 显示全部楼层
假设count变量的地址为p。

count += 1 转换成汇编语言应该是:


count = count + 1 则是:


在C ...
pusofalse 发表于 2011-6-3 16:37



    很多时候,可读性和效率是矛盾的。
不过,在现在硬件越来越强的今天,很多人写代码,都注重可读性了,在十年前,可以后者呢
对于本例而言,我倒觉得“+=”可读性不差

还好,au3不支持goto,哈哈!
发表于 2011-6-4 06:25:31 | 显示全部楼层
学习了。。
发表于 2011-6-4 07:29:09 | 显示全部楼层
大家认为下面三种,那种更有效率呢, 估计大家平时没有注意过,这里我也把这个提出来,因看到很多人写的代码If时,用的最没有效率的那个:

① If $Flag Then MsgBox(0, "Yeah", "OK")
② If $Flag == 1 Then MsgBox(0, "Yeah", "OK")
③ If $Flag = 1 Then MsgBox(0, "Yeah", "OK")
发表于 2011-6-4 07:35:25 | 显示全部楼层
本帖最后由 pusofalse 于 2011-6-4 07:41 编辑

其实早就有人提出来了~

http://www.autoitx.com/forum.php ... hlight=%BC%D3%CB%D9
http://www.autoitx.com/forum.php ... EB%BD%CC%2BIF%2BNOT
发表于 2011-6-4 07:59:31 | 显示全部楼层
其实早就有人提出来了~
pusofalse 发表于 2011-6-4 07:35


不过从明确性和可读性出发,我倾向于用② If $Flag == 1 Then MsgBox(0, "Yeah", "OK")
发表于 2011-6-4 09:10:52 | 显示全部楼层
P版就是强大,学习了~~
发表于 2011-6-4 09:51:34 | 显示全部楼层
完了,论坛又出问题了,不能进入子论坛了, 象:http://www.autoitx.com/forum-4-1.html
进去就是:

--------------------------------------------------------------
无法找到该页
您正在搜索的页面可能已经删除、更名或暂时不可用。

请尝试以下操作:

    * 确保浏览器的地址栏中显示的网站地址的拼写和格式正确无误。
    * 如果通过单击链接而到达了该网页,请与网站管理员联系,通知他们该链接的格式不正确。
    * 单击后退按钮尝试另一个链接。

HTTP 错误 404 - 文件或目录未找到。
Internet 信息服务 (IIS)

技术信息(为技术支持人员提供)

    * 转到 Microsoft 产品支持服务并搜索包括“HTTP”和“404”的标题。
    * 打开“IIS 帮助”(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为“网站设置”、“常规管理任务”和“关于自定义错误消息”的主题。
发表于 2011-6-7 15:46:07 | 显示全部楼层
回复 2# pusofalse


  pusofalse 分析的就是好
发表于 2011-6-8 10:04:55 | 显示全部楼层
受教了。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 10:42 , Processed in 0.090190 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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