2011-07-19 176 views
1

我對java編程有一些體面的知識。雖然我不知道編碼的工業標準。我看到,人們堅持堅持設計模式。他們不斷強調重構代碼。儘管我可以理解重構的積極性,但我覺得重構有時會影響性能。例如:代碼的重構會影響應用程序的性能嗎?

例如:考慮這種情況,我不重構代碼。

Class Aclass{ 

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

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

} 

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

考慮到這是我實現的初始代碼片段。在這種情況下,我在內存中有一個Aclass對象,而函數調用函數2。所有這些都發生在Aclass的一個實例的範圍內。

假設如果我重構代碼並將函數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在他的書「重構:改進現有代碼的設計」中給出了一個很好的例子。在這個例子中,將一個環分成兩個實際上改進了的表現。在重構之前,處理器必須在內存的兩個區域之間切換 - 重構之後,它可以專門查看一個區域,然後專門查看另一個區域,(可能)允許進行編譯器優化。

當性能是一個問題時,我的建議是使用分析器來確定問題出在哪裏。然後你知道你應該在哪裏優化你的代碼。

無論如何要小心不成熟的優化。

我希望這對你有用。

+0

說得好!重構可能會降低性能,但變化可能可以忽略不計。您需要平衡代碼可維護性與其性能變化之間的變化。我猜想在大多數情況下,可維護性的提高超過了性能的下降。 – kc2001

0

重構可以影響性能的最佳方式之一是通過隔離代碼中的緩慢部分,以便您可以將優化注意力集中在那裏。要優化一個很長的方法是非常困難的。更容易優化一個微小的方法,更容易看到什麼時候沒有更多的優化。

相關問題