效率:计时器中的成员变量与局部变量

时间:2018-10-22 19:39:48

标签: c# performance variables timer

我在这里找不到类似的问题,所以我要发布新的问题。 在带有计时器的c#程序中,更有效的是:

  1. 声明成员变量,然后将其与每个计时器刻度一起使用,以计算并更改其值,或者
  2. 在timer_tick例程中声明局部变量,然后每次声明它,重新计算,使用它,然后再进行下一个滴答-重新做一次?

示例代码:

ClassOne
{
    float mVar1 = 0;

    Timer_Tick
    {
        mVar1 += CurrentSpeed;
        SpeedOfSomething = mVar1;
    }
}

OR:

ClassOne
{
    Timer_Tick
    {
        float Var1 = 0;
        Var1 += CurrentSpeed;
        SpeedOfSomething = Var1;
    }
}

2 个答案:

答案 0 :(得分:0)

在第二个中:

 Timer_Tick
    {
        float Var1 = 0;
        Var1 += CurrentSpeed;
        SpeedOfSomething = Var1;
    }

每次Timer_Tick触发时,将执行float Var1 = 0;,实际上Var1的值将始终为0。因此,这不是正确的解决方案。

答案 1 :(得分:0)

从理论上讲,优化器可以完全了解局部范围的变量的访问模式,而公共或类级别的变量可能具有多线程访问。尽管仅检查IL代码将为您提供确定的答案,但范围界定变量的基本目的是使它们对尽可能少的其他代码可见。幸运的是,在这种情况下,最严格的作用域可能是最有效的,前提是优化程序可以利用变量的完整生命周期知识来完全消除中间添加操作,并且实际上可以从预编译中完全消除变量代码。