2012-01-19 13 views
0
private var _variable:int; 

public function set variable(val:int):void{ 

     _variable = val; 

} 
public function get variable():int{ 

    return _variable 

} 

変数を増やす必要がある場合は、どちらを最適化するのが最適ですか?Actionscript 3.0 getter setter increment

__instance.variable++; 

または

__instance.variable = __instance.variable + 1; 

この質問をした理由は、私は++を読んだことが、ある= A + 1よりも高速です;. getterとsetterを使用する場合でも同じ原則が適用されますか?この操作を行うには、VM内の特別なオペコードがないため

+0

@ sh4nx0r。ちょっとだけ答えを受け入れた。 – user418836

答えて

3

んが、通常、彼らは同じように翻訳されず、VMは、これらの操作を行う必要があります:

  • は、レジスタ
  • に変数の値を読みます
  • インクリメントレジスタ
  • は、それが第二の方法よりも__instance.variable++を書くために短くし、よりエラーを起こしやすいです今値

を戻します。

逆に、var++を実行するローカル変数をインクリメントすると、レジスタの値を直接インクリメントする特別な操作(inclocalまたはinclocal_i(iは整数を表します))がわずかに速くなる可能性があります。

ここAVM2オペコードの例リスト:限り私は、これら2つの間に段階的な差はありません知っているように http://www.anotherbigidea.com/javaswf/avm2/AVM2Instructions.html

0

..

私は++を読んだことがあるが、=よりも高速ですa + 1;

実際、あなたのこの声明はパラドックスです。 コンパイラ(この例ではCコンパイラ)は、++をa = a + 1とみなしているので、+ +を書くとしてもそうです。大きな違いはありません。

+0

私はこれが正しくないと確信しています。通常、レジスタを1つだけ増減する操作があります。これらは、CPUのすでに高速な「加算」および「減算」演算よりも高速です。 Flash VMはおそらく同様のことをしますが、おそらくプロパティの場合はそうではありません(ローカル変数のみ)。 –