1

誰かがこれらの正確な速度テストの1つを知っているか、または持っているかどうか、Actionscript 3(違いが生じる場合はAir 2.5)で「以上」と「以上」の速度をテストできるかどうか疑問に思いました。

このコンピューターで仮想マシンを実行していますが、非常に不正確な結果が得られています。

そのまま使用する

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

また

if ( __index >= _vector.length ) return;

最初のテストを考えたのは、1回のテストとそれを元に戻すだけだからですが、actionscript 3には、確信が持てない癖がいくつかあります。

4

3 に答える 3

4

理論的には、速度に違いはないはずです。ActionScriptはnanojitJITライブラリを使用してコードをコンパイルしますが、比較を実装するコードが比較の反転などの単純な変換を変換するという事実を知っています(以前、AdobeのActionScriptとnanojitを共有するMozillaのJavaScriptエンジンでそのコードを処理したことがあります)。逆比較に。したがって、理論的には、唯一の違いは、コードのコンパイルに1〜2サイクル費やされることです。これは心配する価値はありません。

一方、最新のCPUは複雑な獣であり、微小な摂動が顕著な違いを生む可能性があります。ですから、私は2つの間に違いがないことに強いオッズを置きますが、それに農場を賭けることはしません。

于 2011-02-04T10:14:58.400 に答える
2

ほとんどの言語は可能な限り最適なマシンコードにコンパイルしようとするため、あなたの質問は、特にアクションスクリプトよりもコンピュータサイエンスに関係しています。

そこで、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ステートメントに含まれている実際のテストです。ご覧のとおり、<と> =の両方のテストは、アセンブリ内で同じ同じコードとしてコンパイルされました(2つの整数を比較する場合)。したがって、どちらのテストも同じテストになるため、CPUで同じ時間がかかります(左<右の場合、ブロックの場合はスキップします)。これは、アクションスクリプトコンパイラの場合に最もよく当てはまります。

ただし、1つの質問は、JITコンパイラが!([int] <[int])または[int]>=[int]のコンパイルに時間がかかるかどうかです。私の推測では、違いはおそらく問題になるほど十分ではありません。

于 2011-02-04T10:28:16.653 に答える
-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")

また、この手法で不正確な結果が得られる場合は、カウント変数を大きくしてみてください。">"と">="のパフォーマンスを確認する必要がある場合は、ループから「_vector.lenght」検証を削除すると便利な場合があります。

于 2011-02-07T19:21:39.727 に答える