-----
タイトル入力後に、間違ってEnter押したところ、なにも書いていない状態でアップしてしまいました。。ので、以下全文が追記(笑)
-----
近頃、ActionScript3のパフォーマンス向上に(も)取り組んでいるので、そのメモ。
■メモ1) 「リリースビルド」と「デバッグビルド」では、パフォーマンス要因(?)が異なる
Flash Builder(旧FlexBuilder)では、「プロジェクト>リリースビルドの書き出し」からリリース用の swf が出力されます。以下、「リリースビルド」に対して、通常のビルドを「デバッグビルド」と呼んでおきます。
デバッグビルドで、
処理Aのパフォーマンス > 処理Bのパフォーマンス
という結果が出たので、処理Aの方を選んでみたとしても、配布するときのリリースビルドでは同じであったり、逆転したりということがあり得ます。
極端な例では、
//処理A
for( i = 0 ; i < MAX ; i ++ ){
z ++ ;
z ++ ;
z ++ ;
//( z++ を 100回ぐらい下に書く)
}
と、同じ内容の処理
//処理B
for( i = 0 ; i < MAX ; i ++ ){
z ++ ;z ++ ; z ++ ; //( z++ を 100回ぐらい横に書く)
}
で計測すると、デバッグビルドでは、処理Bの方が10倍速くなったり 100倍、1000倍になったりします。どれだけ早くなるかは、z++ をいくつ書くかによって変わります。しかし、リリースビルドではまったく同じ速度になります。
原因は不明ですが(ブレイクポイントを挟める仕組みが影響している?)、この現象を信じてパフォーマンスチューニングを行ってしまうと痛い目にあいます。というか、私があいました(涙)。
・・・
二つの処理を比較するときは、厳密にはリリースビルドで行わないといけないということです。
とくに注意すべきは、AとBのアルゴリズム比較で、原理的にBの方が高速なはずなのに、Bの方が行数が多い場合、結果は逆転することがあるということです。速いアルゴリズムの方が、長い記述になる状況は頻発するので注意が必要です。
結論としては、「デバッグビルドでのパフォーマンス計測を当てにするな」ということです。
本当に重要な箇所(ホットスポット?)は、リリースビルドして、サーバにアップして比較しましょう。