引入一次性使用变量是否会导致性能下降?

时间:2019-12-09 14:39:22

标签: c# performance

我最近正在尝试改善辅助项目的代码质量,我想知道有关缓存的一些信息...

假设我们有以下代码:

if(a || b)

现在,让我们想象一下ab实际上是很长的操作,例如: element.getValue(anIndexContainer[anotherSubItemCauseReasons])

我要做的当然是使其具有可读性,例如:

bool shouldDoSomething = a || b
// the bool will NEVER be used after the if

if(shouldDoSomething)

我的问题是:这会消耗更多的缓存吗?

我的猜测是,由于布尔值是在if之前声明的,并且它们从未被使用过,因此编译会像在第一种情况下一样对其进行优化。

是否有有关C#编译器行为的证据/证据/规范?

供以后阅读:

This link是编译器工作的示例,将@stefano balzarotti记入链接:)

1 个答案:

答案 0 :(得分:2)

  

是否有有关C#编译器行为的证据/证据/规范?

据我所知,编译器和JITter(将已编译的字节代码转换为机器代码)几乎可以做任何他们想提高性能的事情,而这些性能不会改变代码的功能效果。有一些标志可以使编译器无法进行这些类型的优化,但这更多是为了调试目的,它可以使字节码与源代码更加对齐。告诉编译器进行优化后,它就失去了控制。

是的,编译器(或JITter)可能会检测到这些变量可以内联并且可以这样做,但是为什么要关心呢?以一种合乎逻辑的方式编写源代码,以便其他维护该源代码(或几个月之后)的人知道您打算做什么。仅当您遇到可衡量的性能问题时,才应尝试使编译器的性能超越智能。

这可能适用于占用寄存器或堆栈空间的低级语言,但是在高级托管语言中,这些并不是大问题。