可能顯示的文件:
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
?
可能顯示的文件:
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
?
不,編譯器沒有足夠的智能來優化它,因爲它不能保證complicated()
多次運行時不會做任何不同的事情。
不,它不是,因爲complicated
可能是一種依賴於其他複雜方法的方法,或在每次迭代後導致不同的行爲。
實際上,您需要將輸出分配給一個變量以避免重新計算開銷。編譯器不這樣做,因爲您可能有一個目標是將方法返回值作爲限制(即您可能需要在每次迭代後重新計算限制)。要測試這個,只需在compilcated()
方法中輸入Thread.Sleep(5000);
,您將看到等待時間。
或者只是,但在'複雜() '方法,看看它發生了什麼 –
哦,是的,只需'Debugger.Break();' –
或簡單的控制檯應用程序測試將包括一個'Console.WriteLine(「複雜的方法寫這一行」);'' –
編譯器無法對其進行優化,因爲有些情況下「複雜()」每次都不會返回相同的整數。因此,每次都執行該條件。您的第一個代碼片段必須更高效。
@CodeNaked這是Java,不能保證C#以同樣的方式工作 –
這不能像你期望的那樣優化!所以,是的,編譯器足夠聰明......知道它必須保持原樣。 –
@Oskar - 你說得對。然後它可能是這一個http://stackoverflow.com/questions/4477296/for-loop-optimization-needed-or-not – CodeNaked