2015-05-08 16 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

并且不要忘记你在验证这一点时,在发布模式下编译程序,并在没有附加调试器的情况下运行。调试器附件和调试模式将阻止任何优化。 –