1

私は一度、他のクラスのメインゲームクラスのプロパティやそのようなものをできるだけ参照するのは避けなければならないと言われました。これは実際には真実ですか?簡単な例では、私の文字クラスにAS3:クラス間で参照が多すぎると非効率ですか?

MainGame.property = something; MainGame.property2 = something2; MainGame.property3 = something3; //etc.

は、関数で

MainGame.function1();

を同じに入れて(それによって、「開く」する必要があることを呼び出すよりも実行に時間がかかるだろうそのクラスは複数回ではなく1回だけ)?同じロジックにより、

something = MainGame.property; something2 = MainGame.property;

variable = MainGame.property; something = variable; something2 = variable;よりわずかに少ない効率的でしょうか?

+0

私もこのことを知りたいと思います。具体的には、Main.asに由来するvarがあり、すべてのムービークリップシーンに渡されます。これらはすべて、特定の内部変数としてCoreSceneを継承します。 – quantomworks

+0

これは、成熟前の最適化の素晴らしい例です。いずれのアプローチでもパフォーマンス上の問題に遭遇することはなく、パフォーマンス上の問題は別の欠陥から発生します。 (BTWでは、関数呼び出しはプロパティの割り当てよりも高価ですが、重要なパフォーマンスの最適化はこれらの2つの間で決まるわけではありません)。 – Aaron

+0

@Aaronあまり早すぎると思っているしかし、最適化の時間は最終的に成熟し、知っておくと役立つかもしれません。 'main.property'は' this.property'よりも高価ですか? –

答えて

1

操作を参照することを考えてみましょう。すべて "。"すべての関数呼び出し "()"は操作(および重いもの)、すべての "+"、 " - "などです。

実際、特定のアプローチは、他のアプローチよりも効率的なコードを生成します。

しかし、つまり、効率の悪いアプローチの結果を感じるためには、各フレームで何百万という操作(または適切な難易度の重いタスク)を実行するプログラムを作成する必要があります。メガバイトのバイナリデータを解析していない場合、またはビットマップを変換していない場合、パフォーマンスについて心配する必要はありません。パフォーマンスと効率を心配するのは一般的には良いことですが。

あなたのコードの効率を測定するために喜んでいる場合は、そのパフォーマンスを測定するのは自由です。

var aTime:int; 

var a:int = 10; 
var b:int = 20; 
var c:int; 
var i:int; 
var O:Object; 

aTime = getTimer(); 
O = new Object; 

for (i = 0; i < 1000000; i++) 
{ 
    O.ab = a + b; 
    O.ba = a + b; 
} 

trace("Test 1. Elapsed", getTimer() - aTime, "ms."); 

aTime = getTimer(); 
O = new Object; 
c = a + b; 

for (i = 0; i < 1000000; i++) 
{ 
    O.ab = c; 
    O.ba = c; 
} 

trace("Test 2. Elapsed", getTimer() - aTime, "ms."); 

aTime = getTimer(); 
O = new Object; 

for (i = 0; i < 1000000; i++) 
{ 
    O['ab'] = a + b; 
    O['ba'] = a + b; 
} 

trace("Test 3. Elapsed", getTimer() - aTime, "ms."); 

はそうでない場合は、総実行時間が1秒を超えるように数百万の繰り返しループを実行する準備ができて精度は低すぎるでしょう。

関連する問題