2012-06-19 25 views

回答

2

分支時當然會有性能問題。

但是你不能在沒有分支的情況下製作一個合理的程序。

因此,使用if,如果通過分析程序來檢測代碼中特定位置的問題,請嘗試查看是否可以減少分支數或將其排除在循環之外。但只要代碼保持清晰,不要過多關注它。

大多數時候,衆多if的第一個影響是可讀性和可維護性。但是,不成熟的優化通常會對這些主題產生更大的影響。

+1

,幾乎總是,它不是分支本身就是沉重的,但評估條件。考慮它們的順序和重複性可能有幫助(關於過早優化的說明適用)。 – Thilo

2

這取決於你用在你的if語句,也有使用,如果以正確的方式

我會說出其中的一些

  • 始終使用,如果這是最有可能對於一些業績之前,其他情況發生,使用更常見的案件在此之前使用的可能性較小
  • 嘗試循環之前,如果使用, 例如的那些

,而不是這個

BOOL isCase1 = [self isCase1]; 
for (int i = 0 ; i < 10000 ; i ++) 
{ 
    if(isCase1) 
    { 
     //do something 
    } 
    else 
    { 
     //do some other thing 
    } 
} 

使用本

BOOL isCase1 = [self isCase1]; 

    if(isCase1) 
    { 
     for (int i = 0 ; i < 10000 ; i ++) 
     { 
     } 
    } 
    else 
    { 
     for (int i = 0 ; i < 10000 ; i ++) 
     { 
     } 
    } 

不要假設你將需要提高性能,你是肯定的,大部分的時間你的表現是做好事,如果你確信之前一些代碼導致性能問題,改進它(不要過早優化代碼)

這些都是一些的情況下,有更多的

UPDATE:

其他一些有用的事情可以做,緩存的布爾例如statments

檢查

for (int i = 0 ; i < 10000 ; i ++) 
{ 
    if([self isCase1]) //Do some thing 
} 

使用

相反

//Cache the result inside a variable 
BOOL isCase = [self isCase1]; 
for (int i = 0 ; i < 10000 ; i ++) 
{ 
    if(isCase) //Do some thing 
} 
+0

對於將東西拉出循環的示例+1(也適用於所有其他類型的東西,而不僅僅是if語句)。 – Thilo

+0

請注意,一個體面的編譯器已經可以執行此優化,因此請先檢查,否則您只需對代碼進行混淆即可。 –

+0

@PaulR如果你確定編譯器可以做到這一點,請張貼一些參考資料,也是我已經在上面說過不要這樣做,直到100%確定代碼有性能問題:) –