annybaby 发表于 2011-6-3 15:45:53

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

本帖最后由 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不需要~~{:face (356):}

pusofalse 发表于 2011-6-3 16:37:36

假设count变量的地址为p。

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

count = count + 1 则是:

mov eax, dword ptr ; 将p地址中的数值放入eax寄存器中。
add eax, 1 ; eax加1。
mov dword ptr , eax ; 将eax的新值放入p地址中。

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

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

daiyu116 发表于 2011-6-3 19:13:00

哇塞,小弟真是受益匪浅~能从p版学习不少东西

annybaby 发表于 2011-6-3 21:06:07

回复 2# pusofalse


    P版就是强大,学习了~~{:face (88):}

蜘蛛抱蛋 发表于 2011-6-3 21:32:47

本帖最后由 蜘蛛抱蛋 于 2011-6-3 21:39 编辑

曾经在图书馆看到一本《编程卓越之道 第二卷:运用底层语言思想编写高级语言代码》楼主如果有机会扫扫,定会获益匪浅
补充一点点
在判断语句为连续的数值用switch比IF嵌套要好,case语句应该将最可能匹配的条件放在最上面,因为执行时如果遇到匹配的子语句就会跳出判断

annybaby 发表于 2011-6-3 21:37:32

回复 5# 蜘蛛抱蛋

谢谢介绍,呵呵...

happytc 发表于 2011-6-4 01:26:56

假设count变量的地址为p。

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


count = count + 1 则是:


在C ...
pusofalse 发表于 2011-6-3 16:37 http://www.autoitx.com/images/common/back.gif


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

还好,au3不支持goto,哈哈!

淡定开源 发表于 2011-6-4 06:25:31

学习了。。

happytc 发表于 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")

pusofalse 发表于 2011-6-4 07:35:25

本帖最后由 pusofalse 于 2011-6-4 07:41 编辑

其实早就有人提出来了~

http://www.autoitx.com/forum.php?mod=viewthread&tid=15337&highlight=%BC%D3%CB%D9
http://www.autoitx.com/forum.php?mod=viewthread&tid=12507&highlight=%C7%EB%BD%CC%2BIF%2BNOT

happytc 发表于 2011-6-4 07:59:31

其实早就有人提出来了~
pusofalse 发表于 2011-6-4 07:35 http://www.autoitx.com/images/common/back.gif

不过从明确性和可读性出发,我倾向于用② If $Flag == 1 Then MsgBox(0, "Yeah", "OK")

dyd 发表于 2011-6-4 09:10:52

P版就是强大,学习了~~

happytc 发表于 2011-6-4 09:51:34

完了,论坛又出问题了,不能进入子论坛了, 象:http://www.autoitx.com/forum-4-1.html
进去就是:

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

请尝试以下操作:

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

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

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

    * 转到 Microsoft 产品支持服务并搜索包括“HTTP”和“404”的标题。
    * 打开“IIS 帮助”(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为“网站设置”、“常规管理任务”和“关于自定义错误消息”的主题。

leon460 发表于 2011-6-7 15:46:07

回复 2# pusofalse


pusofalse 分析的就是好

浪迹红客 发表于 2011-6-8 10:04:55

受教了。。。
页: [1] 2
查看完整版本: [已解决]关于AU3两种加法的效率??