2017-08-12 100 views
4

在Unity中使用foreach循環時我需要在更新方法中調用此方法。所以它被稱爲每幀一次...性能 - 在使用foreach循環之前檢查列表是否爲空

我想知道,如果最好在使用foreach循環之前檢查列表的計數或它是多餘的。

所以我

if (myList.Count > 0) 
{ 
    foreach (Type type in myList) 
    { 
    } 
} 

foreach (Type type in myList) // no need for a check before 
    { 
    } 

我還可以使用

for (int i = 0; i < myList.Count; i++) // use a for loop instead 
{ 
    myList[i].DoSomething(); 
} 
+1

請先閱讀:https://ericlippert.com/2012/12/17/performance-rant/ – DavidG

+0

您是否嘗試過循環?性能比foreach更好。 https://stackoverflow.com/a/365658/4662054 – OsmanSenol

+4

沒有必要檢查。不要陷入這樣的事情。如果你的程序運行緩慢,那麼在試圖遍歷它之前檢查列表是否爲空是不會加速的。 「不成熟的優化是萬惡之源。」 - 唐納德Knuth。 –

回答

4

除非你需要一些特定的邏輯,如果該列表爲空,則if語句當然多餘。在foreach循環中,如果沒有數據 - 它只是不執行循環。

雖然這或多或少是最佳實踐而非性能問題。影響實際上不存在;然而,我認爲它從來都不是一個糟糕的主意,至少要意識到這些類型的東西。

+0

爲什麼隨機投票? –

0

性能差異幾乎可以忽略不計(但它從來沒有傷害測量)。

在另一方面,一個純foreach將用於幾乎任何收集工作,而使用一個for環或檢查Count(或LengthCount())隱含地假設集合是一個IList

因此,您有三個選項(可能)具有同等性能,但其中一個比其他選項靈活得多。