Domanda

Mi chiedevo se qualcuno lo sapesse o ha uno di quei test di velocità accurati potrebbe testare "non meno di" contro "maggiore o uguale a" velocità in ActionScript 3 (Air 2.5 se ciò fa la differenza)?

Ho macchine virtuali in esecuzione su questo computer e ottengo risultati molto imprecisi.

Usandolo come tale

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

o

if ( __index >= _vector.length ) return;

Avrei pensato al primo, dal momento che tutto ciò che sta facendo è 1 test e poi invertirlo, ma ActionScript 3 ha alcune di quelle stranezze in cui non si può mai essere sicuri.

È stato utile?

Soluzione

Non dovrebbe esserci una differenza di velocità, in teoria. ActionScript utilizza la libreria Jit Nanojit per compilare il codice, e lo so per un dato nel confronto inverso. Quindi in teoria l'unica differenza è un altro ciclo o due spesi per compilare il codice. Questo non vale la pena preoccuparsi.

D'altra parte, le CPU moderne sono bestie complesse e le perturbazioni infinitesimali possono fare notevoli differenze. Quindi, mentre mettevo forti probabilità che non ci fosse alcuna differenza tra i due, non scommetterei la fattoria.

Altri suggerimenti

La tua domanda riguarda l'informatica più di quanto non fa lo script di azione in modo specifico poiché la maggior parte delle lingue tenterà di compilare il codice macchina più ottimale possibile.

Quindi, userò un esempio C ++ per rispondere alla tua domanda.

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

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

Questo produce la seguente sezione chiave in assemblaggio:

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  

Le linee 00231375 e 00231382 sono i test effettivi contenuti nell'istruzione IF. Come puoi vedere, entrambi i miei test <e> = sono stati compilati come lo stesso codice identico nell'assembly (quando si confrontano due numeri interi). Pertanto, entrambi i test richiederà lo stesso tempo sulla CPU poiché entrambi si traducono nello stesso test (se a sinistra <a destra, salta se blocco). Questo sarà molto probabilmente il caso del compilatore di script di azione.

Tuttavia, una domanda potrebbe essere se il compilatore JIT impiega più tempo a compilare! ([Int] <[int]) o [int]> = [int]. La mia ipotesi è che la differenza probabilmente non è sufficiente da importare.

Fai un ciclo e usa getTimer () per scoprire. Prova qualcosa di simile:

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")

Inoltre, se ottieni risultati innacurati con questa tecnique, prova a rendere il conteggio variabile più grande. La rimozione della verifica "_vector.lenght" dal ciclo può essere utile se è necessario controllare le prestazioni ">" e "> ="

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top