Мне уже давно интересно, как решить эту проблему, и я не могу найти элегантного решения.Я думаю, что некоторые примеры - самый простой способ понять проблему.
Допустим, у нас есть этот код внутри класса, и x и y должны начинаться с 0, когда их функции вызываются:
// here we have x as a local variable
private void functionX() {
int x = 0;
// ...
// do stuff with x
// ...
}
// here we have y as an out of function scope variable
int y;
private void functionY() {
y = 0;
// ...
// do stuff with y
// ...
}
public void update()
{
// this is slower because x gets a new instance every time functionX gets called
for (int i = 0; i < 100000; i++) {
functionX();
}
// this is faster because y gets only one instance before the function ever gets called
for (int i = 0; i < 100000; i++) {
functionY();
}
}
Я проверил этот код, и использование переменной области видимости вне функции вместо использования локальной переменной дает лучшую производительность (хотя и незначительно в этом примере, но, тем не менее, увеличение производительности).Недостатком является то, что вы должны объявить переменную функции вне области действия функции, чтобы получить этот выигрыш в производительности, который делает ваш код более запутанным и более подверженным ошибкам.
Это очень простопример, но что произойдет, если у вас есть тысячи строк кода с тоннами функциональных переменных такого рода, и выигрыш в производительности, связанный с тем, что они находятся вне области действия, нельзя игнорировать, но нельзя игнорировать беспорядок, который вы создаете, когда все эти переменные находятся вне области видимостиили?Есть ли решение этой проблемы, или вам просто необходимо будет сделать выбор между производительностью и удобочитаемостью / надежностью?
пс. создание статических переменных x или y внутри их функций неработать либо тогда, когда вам нужно создать несколько объектов из класса, в котором они находятся (все ваши объекты будут иметь один экземпляр x и y для всей среды выполнения программы)
Редактировать: еще больше упростить код