2011-07-26 60 views
3

可能顯示的文件:
for loop optimization
for-loop optimization - needed or not?在「for」循環中,是否在每個迭代上重新評估終止條件?

例如

int maxloop = complicated(); 
    for (int i=0;i<maxloop;i++){} 

for (int i=0;i<complicated();i++){} 

是編譯器足夠聰明的優化呢?

while

+2

@CodeNaked這是Java,不能保證C#以同樣的方式工作 –

+1

這不能像你期望的那樣優化!所以,是的,編譯器足夠聰明......知道它必須保持原樣。 –

+0

@Oskar - 你說得對。然後它可能是這一個http://stackoverflow.com/questions/4477296/for-loop-optimization-needed-or-not – CodeNaked

回答

2

不,編譯器沒有足夠的智能來優化它,因爲它不能保證complicated()多次運行時不會做任何不同的事情。

0

不,它不是,因爲complicated可能是一種依賴於其他複雜方法的方法,或在每次迭代後導致不同的行爲。

1

實際上,您需要將輸出分配給一個變量以避免重新計算開銷。編譯器不這樣做,因爲您可能有一個目標是將方法返回值作爲限制(即您可能需要在每次迭代後重新計算限制)。要測試這個,只需在compilcated()方法中輸入Thread.Sleep(5000);,您將看到等待時間。

+0

或者只是,但在'複雜() '方法,看看它發生了什麼 –

+0

哦,是的,只需'Debugger.Break();' –

+0

或簡單的控制檯應用程序測試將包括一個'Console.WriteLine(「複雜的方法寫這一行」);'' –

0

編譯器無法對其進行優化,因爲有些情況下「複雜()」每次都不會返回相同的整數。因此,每次都執行該條件。您的第一個代碼片段必須更高效。