Question

Je me demandais si quelqu'un savait ou a un de ces tests de vitesse précis pour tester "pas moins" versus "plus ou égal à" la vitesse dans ActionScript 3 (AIR 2.5 si cela fait une différence)?

J'ai des machines virtuelles en cours d'exécution sur cet ordinateur et j'obtiens des résultats très inexacts.

L'utiliser comme tel

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

ou

if ( __index >= _vector.length ) return;

J'aurais pensé que le premier, car tout ce qui fait est 1 test, puis le réinverser, mais ActionScript 3 a certaines de ces bizarreries où vous ne pouvez jamais être sûr.

Était-ce utile?

La solution

Il ne devrait pas y avoir de différence de vitesse, en théorie. ActionScript utilise la bibliothèque Nanojit Jit pour compiler le code, et je sais pour un fait (ayant travaillé sur ce code auparavant dans le moteur JavaScript de Mozilla, qui partage Nanojit avec ActionScript d'Adobe) que le code pour implémenter les comparaisons transformera des conversions simples comme l'inversion d'une comparaison dans la comparaison inverse. Ainsi, en théorie, la seule différence est un autre cycle ou deux dépensé pour compiler le code. Cela ne vaut pas la peine de s'inquiéter.

D'un autre côté, les processeurs modernes sont des bêtes complexes et les perturbations infinitésimales peuvent faire des différences notables. Donc, même si je ne serais fortement pas en cours sur la différence entre les deux, je ne parierais pas la ferme dessus.

Autres conseils

Votre question concerne l'informatique plus que le script d'action spécifiquement car la plupart des langues tenteront de compiler le code machine le plus optimal possible.

Donc, j'utiliserai un exemple C ++ pour répondre à votre question.

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

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

Cela produit la section clé suivante dans l'assemblage:

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  

Les lignes 00231375 et 00231382 sont vos tests réels contenus dans l'instruction IF. Comme vous pouvez le voir, mes tests <et> = ont été compilés comme le même code identique dans l'assemblage (lors de la comparaison de deux entiers). Par conséquent, l'un ou l'autre test prendra le même temps sur le CPU car ils aboutissent tous les deux au même test (s'ils sont à droite, sautez si le bloc). Ce sera très probablement le cas avec le compilateur de script d'action.

Cependant, une question pourrait être de savoir si le compilateur JIT prend plus de temps à compiler! ([Int] <[int]) ou [int]> = [int]. Je suppose que la différence ne suffit probablement pas à compter.

Faites une boucle et utilisez Gettimer () pour découvrir. Essayez quelque chose comme ceci:

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

De plus, si vous obtenez des résultats inacultés avec cette tecnique, essayez d'agrandir la variable de comptage. La suppression de la vérification "_vector.leght" de la boucle peut être utile si vous avez juste besoin de vérifier les performances ">" et "> ="

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top