2011-07-19 9 views
1

私はjavaでのプログラミングのいくつかのまともな知識を持っています。私はコーディングの業界標準を認識していませんが。私はそれを見ます、人々はデザインパターンに固執することを主張します。彼らは常にリファクタリングコードを重視しています。私はリファクタリングの利点を理解することができますが、リファクタリングがパフォーマンスに影響を及ぼすことがあります。コードのリファクタリングはアプリケーションのパフォーマンスに影響しますか?

例:リファクタリングコードを使用しないこのケースを検討してください。

Class Aclass{ 

    function one(){ 
    ........ 
    two(); 
    } 

    function two(){ 
    ........ 
    } 

} 

Class MainClass{ 
    main(){ 
    Aclass obj = new Aclass(); 
    obj.one(); 
    } 
} 

これが私が実装した初期コードスニペットであることを考慮してください。この場合、私はメモリ内にAクラスのオブジェクトを1つ持ち、その関数を関数2と呼びます。このすべては、Aclassの1つのインスタンスの範囲内で発生します。

私がコードをリファクタリングし、関数2を別のクラスBclassにシフトするとします。コードは次のようになります。私は、上記のようにコードをリファクタリングすると

Class Aclass{ 

     function one(){ 
     ........ 
     Blass bclass = new Bclass(); 
     bclass.two(); 
     } 
} 

Class Bclass{ 
     function two(){ 
     ..... 
     } 
} 


Class MainClass{ 
    main(){ 
    Aclass obj = new Aclass(); 
    obj.one(); 
    } 
} 

、私はBclassのための新しいオブジェクトを作成する必要があります下にあるかもしれません。このようなリファクタリングが大規模なアプリケーションで大規模に行われると、より多くのインスタンスがメモリに蓄積され、アプリケーションのパフォーマンスに影響を与えます。

上記の例のように、アプリケーションのパフォーマンスに影響を与えている可能性がありますか?あるいは私が私の前提に間違っている場合は、プログラミングでこの問題に対処する方法を教えてください。

おかげ

答えて

4

リファクタリングは確かにいつもではないが、あなたが期待する方法で、パフォーマンスに影響を与える可能性があります。 Martin Fowlerは、彼の著書「リファクタリング:既存のコードの設計を改善する」の素晴らしい例を挙げています。この例では、1つのループを実際に2つに分割すると、が改善され、パフォーマンスはになります。リファクタリングの前に、プロセッサはメモリの2つの領域を切り替えなければなりませんでした。リファクタリング後、ある領域を排他的に見て、他の領域を排他的に見ることができました(おそらく)コンパイラの最適化が可能になりました。

パフォーマンスが問題になる場合は、プロファイラを使用して問題のある箇所を特定することをお勧めします。次に、コードを最適化する場所を知っています。

いずれにせよ時期尚早の最適化に注意してください。

私はこれがあなたに役立つことを願っています。

+0

うわー!リファクタリングはパフォーマンスを低下させる可能性がありますが、変更はごくわずかです。コードの保守性の変化とパフォーマンスの変化とのバランスを取る必要があります。私はほとんどの場合、パフォーマンスの低下を相殺する以上のメンテナンス性の向上があると思います。 – kc2001

0

リファクタリングがパフォーマンスに影響を及ぼす最善の方法の1つは、コードの低速セクションを分離することです。そこで、最適化の注意を集中させることができます。長い方法を最適化することは非常に難しいです。小さなメソッドを最適化するのが簡単になり、最適化が不要になったら見やすくなります。

関連する問題