“不小于”与“大于或等于”速度

时间:2011-02-04 10:07:50

标签: actionscript-3 actionscript speed-test

我想知道是否有人知道或者其中一个准确的速度测试可以测试 “不小于”与“大于或等于”速度的动作脚本3(Air 2.5如果有所不同)?

我在这台计算机上运行虚拟机,结果非常不准确。

使用它

if ( !(__index < _vector.length) ) return;

if ( __index >= _vector.length ) return;

我会想到第一个,因为它所做的一切都是1次测试然后反转它,但是动作3有一些你永远无法确定的怪癖。

3 个答案:

答案 0 :(得分:2)

理论上,速度应该没有差别。 ActionScript使用nanojit JIT库来编译代码,我知道一个事实(之前在Mozilla的JavaScript引擎中处理过该代码,它与Adobe的ActionScript共享nanojit),实现比较的代码将转换简单的转换,如反转的比较进入逆向比较。所以理论上唯一的区别是另外一个或两个周期用于编译代码。这不值得担心。

另一方面,现代CPU是复杂的野兽,无穷小的扰动会产生显着的差异。因此,虽然我对这两者之间没有任何区别存在很大的困难,但我不会打赌这个农场。

答案 1 :(得分:1)

您的问题与计算机科学有关,而不是专门针对动作脚本,因为大多数语言都会尝试尽可能地编译成最佳的机器代码。

因此,我将使用C ++示例来回答您的问题。

int j = 16;
if (!(j < 10))
{
    int l = 3;
}

if (j >= 10)
{
    int l = 3;
}

这会在汇编中产生以下关键部分:

00231375  cmp         dword ptr [j],0Ah  
00231379  jl          wmain+32h (231382h)  
0023137B  mov         dword ptr [l],3  
00231382  cmp         dword ptr [j],0Ah  
00231386  jl          wmain+3Fh (23138Fh)  
00231388  mov         dword ptr [l],3  
0023138F  xor         eax,eax  

第00231375行和第00231382行是if语句中包含的实际测试。如你所见,我的&lt;和&gt; =测试被编译为汇编中相同的相同代码(比较两个整数时)。因此,任一测试都将在CPU上花费相同的时间,因为它们都会导致相同的测试(如果保持&lt;正确,则跳过if块)。这很可能是动作脚本编译器的情况。

但是,一个问题可能是JIT编译器需要更长的时间来编译!([int]&lt; [int])或[int]&gt; = [int]。我的猜测是差异可能不够重要。

答案 2 :(得分:-1)

制作一个循环并使用getTimer()来发现。尝试这样的事情:

var startTime:int = getTimer()
var count:int = 1000000
for (var i:int = 0;i<count;i++) {

    if ( !(__index < _vector.length) ){

    }
}
trace("The first script took "+String(getTimer()-startTime) + "ms to run")



startTime = getTimer()
for (i = 0;i<count;i++) {

    if ( __index <= _vector.length ){

    }
}
trace("The second script took "+String(getTimer()-startTime) + "ms to run")

此外,如果您使用此tecnique获得了无效结果,请尝试使计数变量更大。如果您只需要检查“&gt;”,则从循环中删除“_vector.lenght”验证可能很有用和“&gt; =”表现