2013-01-19 34 views
1

如果我的代碼需要一段時間才能執行,那麼每次迭代都會打印出結果會使程序變慢。仍然不時收到輸出來檢查代碼的進展情況,我可能有:重複循環中if語句的速度是否會影響整體性能?

if (i % 10000 == 0) { 
    # print progress here 
} 

是否if語句檢查每次都慢下來呢?如果我只是不輸出輸出,只是等待,它會使它顯着更快嗎?

另外,它做的更快:(i % 10000 == 0)(i == 10000)
檢查相等或模數更快嗎?

+0

這需要大約一納秒。鑑於您希望每秒鐘輸出一次,該聲明只會讓您的代碼變慢十億分之一。 –

回答

1

在一般情況下,根本沒有關係。

稍微長一些的答案:除非循環運行數百萬次,其他語句實際上比if語句(例如,簡單的乘法等)要求更低,否則無關緊要。在這種情況下,您可能會看到性能下降。

關於(i % 10000 == 0)(i == 10000),後者明顯更快,因爲它只是比較,而前者的可能性(相當昂貴)的模量和比較。

也就是說,如果您的循環不佔用程序運行時間的90%,那麼if語句和模數將不會產生任何差異。通常情況下,只有在學校的情況下:)。通過問這個問題,你可能會花費更多的時間,而不是通過打印任何東西來節省時間。對於開發和調試來說,這不是一個糟糕的方法。

對於這種決定的金科玉律:

寫最可讀的和明確的代碼,你能想象到你想要它做的事情 。如果您遇到性能問題,請首先查看 錯誤的數據結構和算法選擇。如果你已經完成 所有那些和需要一個真的快速程序,配置文件它看看哪一個 部分需要最多的時間。畢竟這些,你被允許做這種低級猜測 。