[AS3] ループ処理におけるカウンタ変数の減算と加算 3 [Edit]

Adobe Developer ConnectionにKeith Gladstien氏が「Flashのパフォーマンスの最適化」という記事を寄稿されました。その中で「Flashでは、最も実行速度の速いループは逆forループです」と書かれています。ループ処理のカウンタ変数を加算するか減算するかの違いは、本F-siteの記事でも何度か比べてきました。そこで、改めてforループについて少し考えてみます。

すでに「ループ処理におけるカウンタ変数の減算と加算 2」で述べたとおり、「加算と減算の演算そのものには差が感じられません」。つぎのテスト用スクリプトで1億回繰返しても、その差はばらつきがあり、有意とまではいえないように思えます。

Comparing loop speed with incrementing and decrementing a variable - wonderfl build flash online

強いていえば、わずかに減算の方が速い場合は多いか、というくらいです(環境によって異なる可能性も少なくありません)。その理由として考えられるのは、加算では継続条件に変数を使っていることでしょう。減算ではリテラルの数値0を用いているので、その差が生じるのかもしれません。

ただ、これくらいの差であれば、むしろコードの見やすさや、扱いやすさで考えた方がよさそうに思えます。たとえば、Gladstien氏も注意されているように、減算するカウンタ変数をuint型で指定すると、継続条件の終わりの0からさらに1減らしたとき無限ループに陥ってしまいます。変数を正しく型指定したり、ループ処理の中から無駄な演算は省く、といった基本の方が効果も高いでしょう(もちろん、そこからさらに改善したいという場合ならば結構です)。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事