gpt4 book ai didi

c# - 常量和操作可变化对 C# 性能的影响

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:57 25 4
gpt4 key购买 nike

在 C/C++ 编程中经常使用常量来生成更清晰的代码。有时也可能有优化的好处。但是,我想知道在 C# 中将值声明为只读或常量除了可读性更高的代码之外还有什么好处。

假设我有以下 C# 代码:

public Double HalfPiSomething(Int32 input)
{
return input + (Math.PI / 2);
}

这是一个相当简单的示例,但每次调用该方法时,我们都会将 Math.PI 除以 2,将其添加到输入中,然后将其返回给调用语句。

让我们使用该代码并使 Math.PI/2 在包含类的某处成为它自己的变量:

private Double _halfPi = Math.PI / 2;

public Double HalfPiSomething(Int32 input)
{
return input + _halfPi;
}

显然,采用Math.PI/2 的操作并将其放在自己的变量中是一个好主意,就像基本的编码实践一样,特别是如果所述值在类中的多个点中使用...它不在这里,但让我们假装吧。

最后,因为 _halfPi 永远不会改变,所以我们让它成为 const:

private const Double _halfPi = Math.PI / 2;

public Double HalfPiSomething(Int32 input)
{
return input + _halfPi;
}

我想知道的是,除了对 C# 进行良好的编码实践并使代码更易于理解和更难出错之外,执行我上面所做的是否有好处 - 特别是在性能方面?该值在本地内存中的停留时间是否更长?

最佳答案

each time the method is called, we divide Math.PI by 2, add it to input, and return it to the calling statement.

不,这不是正在发生的事情:C# 编译器在编译时评估常量表达式。此外,当混合了常量和非常量的表达式具有可在编译时计算的子表达式时,编译器会预先计算该值,就好像它是单个常量一样。

编译器识别Math.PI / 2子表达式作为常量,执行计算,并生成将输入添加到除法的预计算结果的代码。

What I want to know is, other than being good coding practice for C# and making code easier to understand and harder to make errors with, are there benefits - especially regarding performance - to doing what I did above?

不,没有理由做编译器的工作,除非它会导致更清晰。

Does the value stay in local memory longer?

常量值被“嵌入”到编译器生成的代码中。它们不是本地数据内存的一部分(尽管它们肯定在内存中,只要代码在内存中)。

关于c# - 常量和操作可变化对 C# 性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24764267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com