2015-05-08 21 views
-2

對不起,這是一個愚蠢的問題,但我只需要問這個問題。我有一個運行數十億計算的程序,我試圖讓它運行得更快。在我的程序中,我爲中間計算聲明瞭很多變量。例如,在僞代碼:爲中間計算和性能聲明變量

public bool FunctionThatGetsCalledInMain(manyparameters) 
{ 
    for (int i = 0; i < 10000000; i++) 
    { 
     int x = bigFunctionThatReturnsAnInt(i,manyparameters) 
     double y = bigFunctionThatReturnsADouble(i,manyparameters) 
     string z = bigFunctionThatReturnsAString(i,manyparameters) 

     bool b = someFunctionOfXYZ(x,y,z) 
    } 
} 

我想知道如果我可以做這樣的事情提高性能:

public bool FunctionThatGetsCalledInMain(manyparameters) 
{ 
    for (int i = 0; i < 10000000; i++) 
    { 
     bool b = someFunctionOfXYZ(bigFunctionThatReturnsAnInt(i,manyparameters),bigFunctionThatReturnsADouble(i,manyparameters),bigFunctionThatReturnsAString(i,manyparameters)) 
    } 
} 

我知道它看起來可怕,我的直覺告訴我,這不真的很重要,但我只想看看別人是否同意。

+6

這是java,c#或C++嗎?我很確定它不可能全部都是三個。 – mmking

+4

運行一個分析器來查看真正的瓶頸。 – Jarod42

+0

其實這些都不在F#中,但我認爲這種問題在所有語言中都是相同的。我將編輯標籤。 – user3685285

回答

4

不要試圖用這種方式「優化」性能。現代編譯器將從兩個版本中生成相同的代碼,所以在性能方面不會有任何差異,但是代碼將不可讀。

一般來說,第一種情況更具可讀性,這就是爲什麼首選。它明確地命名臨時變量,這有助於更好地理解代碼。而且,調試更容易。

+1

並且不要忘記你在驗證這一點時,在發佈模式下編譯程序,並在沒有附加調試器的情況下運行。調試器附件和調試模式將阻止任何優化。 –