Эффективность: переменная-член против локальной переменной в таймере - PullRequest
0 голосов
/ 22 октября 2018

Я не смог найти похожие вопросы здесь, поэтому я публикую новый.В программе на c # с таймером, что более эффективно:

  1. Объявление переменной-члена с последующим использованием при каждом тике таймера для вычисления и изменения ее значения, или
  2. Объявление локальной переменной внутриподпрограмму timer_tick и объявлять ее каждый раз, пересчитывать, использовать, а затем со следующим тиком - повторять все заново?

Пример кода:

ClassOne
{
    float mVar1 = 0;

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

ИЛИ:

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

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Теоретически, оптимизатор может полностью знать шаблон доступа для локальной переменной, в то время как общедоступная переменная или переменная уровня класса может иметь многопоточный доступ.Хотя только проверка кода IL даст вам окончательный ответ, основная цель определения переменных - сделать их доступными для как можно меньшего количества другого кода.К счастью, в этом случае наиболее узкая область видимости, вероятно, будет наиболее эффективной, если предположить, что оптимизированная может использовать знание всей переменной вашего жизненного цикла, чтобы полностью исключить промежуточные операции добавления, и фактически может полностью исключить переменную из предварительно скомпилированнойкод.

0 голосов
/ 22 октября 2018

во втором:

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

Каждый раз, когда срабатывает Timer_Tick, будет выполняться float Var1 = 0; и фактически значение Var1 всегда будет 0.Так что это не правильное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...