Я довольно часто пишу код, который копирует переменные-члены в локальную переменную стека, полагая, что это улучшит производительность, удалив разыменование указателя, которое имеет чтобы иметь место при доступе к переменным-членам.
Верно ли это?
Например
public class Manager {
private readonly Constraint[] mConstraints;
public void DoSomethingPossiblyFaster()
{
var constraints = mConstraints;
for (var i = 0; i < constraints.Length; i++)
{
var constraint = constraints[i];
// Do something with it
}
}
public void DoSomethingPossiblySlower()
{
for (var i = 0; i < mConstraints.Length; i++)
{
var constraint = mConstraints[i];
// Do something with it
}
}
}
Я думаю, что DoSomethingPossibleFaster на самом деле быстрее, чем DoSomethingPossibleSlower.
Я знаю, что это в значительной степени микрооптимизация, но было бы полезно получить окончательный ответ.
Edit Просто чтобы добавить немного фона вокруг этого. Наше приложение должно обрабатывать большое количество данных, поступающих из телекоммуникационных сетей, и этот метод, вероятно, будет вызываться примерно 1 миллиард раз в день для некоторых наших серверов. Я считаю, что помогает каждая мелочь, и иногда все, что я пытаюсь сделать, это дать компилятору несколько подсказок.