-toppage-

AIR for Androidではsetter/getterは遅いから使わないほうがいい?

Android, Flash技術 1件のコメント

http://labs.techfirm.co.jp/android/cho/1283

こちらの記事によれば、Androidでの開発の際は速度を稼ぐためにgetterやsetterを使わないほうがいいとのこと(Javaの話)。

じゃあAIR for Androidでもそうなのかな、ということで簡単な実験。


private function timerProc(e:Event):void

{

var total:int = 0;

for (var i:int = 0; i < 250000; i++) {

//benchInstanceはBench型のインスタンス

total += benchInstance.num;

benchInstance.num += 1;

}

//mainTextFieldはステージ上にあるTextFieldのインスタンス

mainTextField.text = total.toString();

}

こんな感じのメインループがあって、


public class Bench

{

private var _num:int;

public function Bench()

{

_num = 1;

}

public function get num():int

{

return _num;

}

public function set num(value:int):void

{

_num = value;

}

}

Bench型はこんな実装がされてると思って下さい。

で、これをHTC Desire(Android2.2にアップデート済み)で実行。だいたい13~14fpsほどです。

getter/setterを利用した場合

 


 

では、getter/setterを使わずに直接アクセスするとどうなるか……

Benchクラスを以下のように書き換えます。


public class Bench

{

public var num:int;

public function Bench()

{

num = 1;

}

/*public function get num():int

{

return _num;

}

public function set num(value:int):void

{

_num = value;

}*/

}

getter/setterを使わない場合。桁あふれはご愛敬

24fps。それなりに速くなっていますね。

非常に多くの計算をし、速度も求められるゲームではgetter/setterを使わないほうがいいかもしれません。

 

ちなみにintでなくNumber型でやってみると、getter/setterを使わないときは21fps、getter/setterを利用しているときはなぜかほぼ同じで13~14fpsでした。

 

(追記)

Benchクラスの中身をpublic static var num:int = 1;だけにしてメインループをtotal += Bench.num; Bench.num += 1;としてみたら19fps程度。staticを使うほうが遅いのはちょっと意外



1件のコメント “AIR for Androidではsetter/getterは遅いから使わないほうがいい?”

  • exod 2020年7月15日1:37 AM | 返信 |

    こんにちは。
    パワハラ指切断でおなじみのド屑県香川のド屑企業フジフーヅでございます。
    裁判も会社ぐるみで偽証をして無事乗り切ったド屑でございます。
    餃子シュウマイなどをスーパーで販売しております。
    店頭で見かけましたらそのときはご購入のほどどうかよろしくお願い致します。

(コメントをどうぞ)