このis
オペレータは少し遅いです。私は百万回の繰り返しを行い、各反復の間に、私は90回のテスト(9つの000 000テストの合計)を行っ
var obj:MyObj = new MyObj();
// Index type comparison
for(var a:int; a<1000000; a++){
if(obj.type == OBJ_TYPE1) continue;
if(obj.type == OBJ_TYPE2) continue;
...
}
// 'is' type comparison
var obj:MyObj = new MyObj();
for(var a:int; a<1000000; a++){
if(obj is ObjectType1) continue;
if(obj is ObjectType1) continue;
...
}
:
私のテストでは、このようなものを見ました。 (10回の試験の平均)の結果は次のとおりであった:
is operator : 1974 ms
int static const compare : 210.7 ms
int instance const compare : 97 ms
int literal compare : 91.9 ms
それが十分に明確ではない念の最後の3つの試験結果について注意:それぞれが依然として整数比較はないが、テストは異なる 種類が格納されている方法で :あなたもせずにきちんとあなたのコードを維持するために、ここで構成定数を使用することができます(
// For the second test the types are stored as static constants
// int static const compare : 97.4 ms
private static const OBJ_TYPE1:int = 0;
private static const OBJ_TYPE2:int = 1;
...
// For the third test the types are stored as instance constants
// int member const compare : 1319.9 ms
private const OBJ_TYPE1:int = 0;
private const OBJ_TYPE2:int = 1;
...
// Here the types are not stored anywhere but instead literals
// are used for each test
// int literal compare : 91.9 ms
for(var a:int; a<1000000; a++){
if(obj.type == 0) continue; // OBJ_TYPE1
if(obj.type == 1) continue; // OBJ_TYPE2
...
}
だから基本的には、整数の比較は常に速く、あなたがリテラル値またはインスタンス変数を使用する場合の違いは巨大です変数を使用するとパフォーマンスが低下します)。
"時間の約97%という小さな効率を忘れてはならない:時期尚早の最適化はすべての悪の根源だ" - Donald Knuth – Allan