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

[AU3基础] 【已解决】AutoIt3中五种循环性能对比测试

  [复制链接]
发表于 2012-7-16 14:30:49 | 显示全部楼层 |阅读模式
本帖最后由 changlianxi 于 2012-7-18 16:30 编辑

我不是AAuto的枪手,再次更改帖子,只测试AutoIt3
AutoIt3循环测试结果

[0]        循环方法和累加方法        耗时(秒)        循环次数        耗时比例
[1]        For.To.Next        $a+=1        25.762         123456000        1.00
[2]        For.To.Next      $a=$a+1        54.133         123456000        2.10
[3]        For.To.Step.Next   $a+=1        25.818         123456000        1.00
[4]        For.To.Step.Next $a=$a+1        54.450         123456000        2.11
[5]        While.WEnd         $a+=1        88.908         123456000        3.45
[6]        While.WEnd       $a=$a+1        122.898         123456000        4.77
[7]        Do.Until           $a+=1        91.669         123456000        3.56
[8]        Do.Until         $a=$a+1        122.881         123456000        4.77
[9]        For.In.Next        $a+=1        132.217         123456000        5.13
[10]        For.In.Next      $a=$a+1        159.829         123456000        6.20

循环123456000次
累加方法A+=1快于A=A+1,特别是For.To.Next循环,能快一倍多!
For用时(STEP声明与否差别不大)25秒
While Wend用时88秒
Do Until用时91秒
For In Next用时132秒

au3源代码

#include <Array.au3>
Dim $sArray[11][4]=[["循环方法和累加方法"],["For.To.Next        $a+=1"],["For.To.Next      $a=$a+1"],["For.To.Step.Next   $a+=1"],["For.To.Step.Next $a=$a+1"],["While.WEnd         $a+=1"],["While.WEnd       $a=$a+1"],["Do.Until           $a+=1"],["Do.Until         $a=$a+1"],["For.In.Next        $a+=1"],["For.In.Next      $a=$a+1"]] ;数组初始化
$sArray[0][1]="耗时(秒)"
$sArray[0][2]="循环次数"
$sArray[0][3]="耗时比例"
Local $a = 0 ,$list =1 ,$i = 0, $j = 0
Local $begin = TimerInit()
For $i = 1 To 1000
        For $j = 1 To 123456
                        $a+=1
        Next
Next
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
For $i = 1 To 1000
        For $j = 1 To 123456
                        $a=$a+1
        Next
Next
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
For $i = 1 To 1000 Step 1
        For $j = 1 To 123456 Step 1
               $a+=1
        Next
Next
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
For $i = 1 To 1000 Step 1
        For $j = 1 To 123456 Step 1
               $a=$a+1
        Next
Next
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
Local  $i = 0, $j = 0
While $i < 1000
         While $j < 123456
                 $a+=1
                 $j += 1
         WEnd
         $i += 1
         $j = 0
WEnd
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
Local  $i = 0, $j = 0
While $i < 1000
         While $j < 123456
                 $a=$a+1
                 $j += 1
         WEnd
         $i += 1
         $j = 0
WEnd
_list()
;MsgBox(0,"a=",$a)
$a=0
Local $i = 0, $j = 0
$begin = TimerInit()
Do
        Do
               $a+=1
                $j += 1
        Until $j >= 123456
        $i += 1
        $j = 0
Until $i >= 1000
_list()
;MsgBox(0,"a=",$a)
$a=0
Local $i = 0, $j = 0
$begin = TimerInit()
Do
        Do
               $a=$a+1
                $j += 1
        Until $j >= 123456
        $i += 1
        $j = 0
Until $i >= 1000
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
Local $ii[1000], $jj[123456]
For $i  In $ii
        For $j In $jj
               $a+=1
                           $j += 1
                   Next
                $i += 1
                $j = 0
        Next
_list()
;MsgBox(0,"a=",$a)
$a=0
$begin = TimerInit()
Local $ii[1000], $jj[123456]
For $i  In $ii
        For $j In $jj
               $a=$a+1
                           $j += 1
                   Next
                $i += 1
                $j = 0
        Next
_list()
;MsgBox(0,"a=",$a)
Func _list()
        $sArray[$list][1] = Round(TimerDiff($begin)/1000,3)
                $sArray[$list][2] =$a
        $sArray[$list][3] =Round($sArray[$list][1]/$sArray[1][1],2)
                $list += 1
        EndFunc
_ArrayDisplay($sArray)
发表于 2012-7-16 19:25:29 | 显示全部楼层
au3和c#对比下吧
发表于 2012-7-16 20:13:08 | 显示全部楼层
你试下以下代码所用的时间.
Local $a
$time=TimerInit()

For $i = 1 to 100
        For $j = 1 to 123456
                $a +=1
        Next
Next;$a=12345600 time=1875ms
MsgBox(0,"$a +=1        "&$a,TimerDiff($time))


Local $a
$time=TimerInit()

For $i = 1 to 100
        For $j = 1 to 123456
                $a =$a+1
        Next
Next;$a=12345600 time=3830ms
MsgBox(0,"$a =$a+1        "&$a,TimerDiff($time))
发表于 2012-7-16 20:13:15 | 显示全部楼层
回复 2# wsfda

小马哥,这不是什么跟什么比的关系,而是:
1、兰州是来宣传AAU的
2、仔细看代码,AU3和AAU测试的次数明显差了10倍
3、兰州烧饼
发表于 2012-7-16 23:35:18 | 显示全部楼层
我一看到标题就猜到主旨是什么了,果不其然
发表于 2012-7-16 23:39:48 | 显示全部楼层
回复 1# changlianxi

不反感也不支持。

AAu拥有性能上的优势无需置疑,但其烂得要死的帮助和各种功能缺失的函数库没让我觉得为什么值得Au3er迁移。
 楼主| 发表于 2012-7-18 16:32:45 | 显示全部楼层
本帖最后由 changlianxi 于 2012-7-19 08:43 编辑
回复  changlianxi

不反感也不支持。

AAu拥有性能上的优势无需置疑,但其烂得要死的帮助和各种功能缺 ...
republican 发表于 2012-7-16 23:39



   

各有用处不同,请注意用词和态度。
 楼主| 发表于 2012-7-18 16:32:50 | 显示全部楼层
回复 8# tenxn

各有用处不同,请注意用词和态度。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 05:39 , Processed in 0.077808 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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