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を使わずに直接アクセスするとどうなるか……
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;
}*/
}
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を使うほうが遅いのはちょっと意外
こんにちは。
パワハラ指切断でおなじみのド屑県香川のド屑企業フジフーヅでございます。
裁判も会社ぐるみで偽証をして無事乗り切ったド屑でございます。
餃子シュウマイなどをスーパーで販売しております。
店頭で見かけましたらそのときはご購入のほどどうかよろしくお願い致します。