2009-09-02 63 views
1

我只是有一個小小的設計問題。什麼是最高性能的,爲什麼?

如果我得到這個代碼

public Interface Test 
{ 
    void Xyz(); 

} 


public class1 : WebControl , Test 
{ 
public void XyZ() 
{ 
    // do someting 
} 

public OnLoad() 
{ 
    ((Test)this).Xyz(); 

// or 

    Test ctrl = this as Test; 
    ctrl.Xyz(); 

// or 

    Xyz(); 

} 

} 

難道代碼將有性能差異?我認爲Xyz()直接調用會更快,但我不確定((測試)this).Xyz()將與直接調用有所不同。

您對此有何看法或參考文檔。

感謝

PS:我只是whant有差異的表現,與...你爲什麼要投或指定接口沒有答案。我知道我可以只直接直接調用我的方法

+2

兩種方式編寫代碼。拿出一個秒錶。每種方法嘗試一百萬次。然後你就會知道答案!我們在這裏可以說的任何事情都只是猜測*;實際上*答案*表現問題的唯一方法是實際*嘗試*它。 – 2009-09-02 19:37:21

回答

7

我希望編譯器會刪除cast和「as」,因爲它可以保證它們都會成功......並且如果沒有,JIT可能會這樣做。如果你使用明確的接口實現,你需要需要演員或as運營商,請注意。在這種情況下,我會使用演員陣容:如果可行的話,我個人僅使用as而不是而不是是正確的類型(在除bug之外的情況下)。

最終,任何性能差異都是微不足道的,但出於可讀性的考慮,我只是在沒有可能的情況下進行演員表演。

+0

+1提及JIT優化。 – 2009-09-02 15:25:32

+0

感謝您的回答。 – 2009-09-02 15:44:25

3

調用該方法,沒有必要投下this參考接口類型爲實施方法仍是當前類。如果您將該類轉換爲接口類型,則會添加不必要的間接方法以獲得您可用的方法。

我不認爲會有巨大的性能差異(正如Jon指出的那樣,JIT很可能會刪除所有的轉換,因爲它是不必要的),但爲了便於閱讀,只需直接調用該方法即可。