哪个花费更少 Cpu/memory/ram... 等等?
Which takes less Cpu/memory/ram... etc?
我有一些与编码资源相关的问题:
Q1 :
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);
}
B 是否因为有 2 个循环而比 A 占用更多资源? 为什么?
Q2:
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占用了更多的资源?编译器是否理解结果相同并从中创建一个变量?
使用分析器。
对于你的第二个问题,C# 编译器将优化编译时常量,例如 10*2-15+15
.
你的第二个 B
示例是更好的代码,尽管编译器可能会为你优化 A
示例。
撇开性能不谈,第二个 A
示例只是糟糕的编码习惯。不必要的重复常量(用户错误的可能性更大,特别是如果您稍后更改此代码)。
也就是说,一个好的经验法则是不要依赖编译器优化。尝试使代码可读,对于实际上 是 常量的东西,您应该按字面意思 define 将它们定义为 const
:
const int WHATEVER = 10 * 2 - 15 + 15;
int result = WHATEVER / X;
FunA(result);
FunA(result);
FunA(result);
最后,这里必须提到的是,分析几乎总是比滚动你自己的基准更准确(我看到写错了很多次)。 Visual Studio 2017 有一个内置的分析器,或者您可以使用其他各种分析器。
如果对性能有疑问,请不要猜测。获取实际指标。
我有一些与编码资源相关的问题:
Q1 :
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);
}
B 是否因为有 2 个循环而比 A 占用更多资源? 为什么?
Q2:
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占用了更多的资源?编译器是否理解结果相同并从中创建一个变量?
使用分析器。
对于你的第二个问题,C# 编译器将优化编译时常量,例如 10*2-15+15
.
你的第二个 B
示例是更好的代码,尽管编译器可能会为你优化 A
示例。
撇开性能不谈,第二个 A
示例只是糟糕的编码习惯。不必要的重复常量(用户错误的可能性更大,特别是如果您稍后更改此代码)。
也就是说,一个好的经验法则是不要依赖编译器优化。尝试使代码可读,对于实际上 是 常量的东西,您应该按字面意思 define 将它们定义为 const
:
const int WHATEVER = 10 * 2 - 15 + 15;
int result = WHATEVER / X;
FunA(result);
FunA(result);
FunA(result);
最后,这里必须提到的是,分析几乎总是比滚动你自己的基准更准确(我看到写错了很多次)。 Visual Studio 2017 有一个内置的分析器,或者您可以使用其他各种分析器。
如果对性能有疑问,请不要猜测。获取实际指标。