哪个需要较少的Cpu /内存/内存...等?

时间:2018-06-24 08:02:12

标签: c# resources cpu

我有一些关于编码资源的问题:

  

第一季度:

A:

for (int i = 0; i < 15; i++)
{

FunA(i);
FunB(i);

}

B:

for (int i = 0; i < 15; i++)
{

FunA(i);

}

for (int i = 0; i < 15 ; i++)
{

FunB(i);

}

因为有2个循环,B是否比A占用更多资源? 为什么?

  

第二季度:

A:

FunA(10*2-15+15/X);
FunA(10*2-15+15/X);
FunA(10*2-15+15/X);

B:

int result=10*2-15+15/X;
    FunA(result);
    FunA(result);
    FunA(result);

A占用更多资源是因为每次都要计算结果还是B占用了更多资源?编译器是否理解结果相同并从中得出变量?

1 个答案:

答案 0 :(得分:2)

使用探查器。

对于第二个问题,C#编译器将优化诸如10*2-15+15之类的编译时常量。

第二个B示例是更好的代码,尽管编译器可能会为您优化A示例。

除了性能,第二个A示例只是不好的编码实践。不必要的重复常量(用户出错的机会更大,尤其是以后更改此代码时)。

也就是说,一个好的经验法则是不要依赖编译器优化。尝试使代码可读,并且对于实际上 恒定的内容,您应该从字面上将它们定义const

const int WHATEVER = 10 * 2 - 15 + 15;
int result = WHATEVER / X;
FunA(result);
FunA(result);
FunA(result);

最后,这里有必要提到的是,剖析几乎总是比滚动自己的基准测试更准确(我发现该基准测试多次写错了很多次)。 Visual Studio 2017具有内置的探查器,或者您可以在其中使用各种其他探查器。

对性能有疑问时,请不要猜测。获取实际指标。