2015-02-03 2 views
0

Я искал, прежде чем задавать свой вопрос. У меня есть два способа сделать цикл. И мне интересно, что эти два более оптимизированы. И может быть, вы можете найти лучше. Целью является петля каждые 1 секунда. Это уже работает.Lua - Какой самый оптимизированный метод функции Lua?

Благодарим вас за пояс. Какой из них лучше. Перед тем, как предложить третий вариант.

  • Мой метод 1:

    content=0 
    function loop1() 
        content=content+1 
    end 
    
    timer.Create("myloop",1,0,function() loop1() end) 
    
  • Мой метод 2:

    content=0  
    Table={ 
        loop1=function() 
         content=content+1 
        end 
    } 
    
    timer.Create("myloop",1,0,function() Table:loop1() end) 
    

Edit:

  • Мой метод 3:

    content=0  
    timer.Create("myloop",1,0,function() content=content+1 end) 
    

Легенда: 0 в timer.Create = цикл INFINIT. 1 в timer.Create = запуск функции, 1 секунду.

Содержание функции упрощается чем-то, что не кажется полезным для базы. Но меня интересует основной метод.

+3

Помимо ненужной упаковки в функции, вы оптимизируя преждевременно - нет смысла в попытке брить циклов от чего-то, что запускается только один раз в секунду_. –

+0

Извините, английский не мой родной язык. Если я понимаю, содержимое должно упростить мой запрос. реальное содержание просто для понимания метода. – Walfrid

ответ

2

Ввод функции в таблицу не дает вам ничего и заставляет лишний поиск в таблице.

Добавление дополнительной функции обертывания (без названия) в вызове timer.Create также не является полезной вещью, поскольку она просто добавляет дополнительные вызовы функций для процесса.

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

-то вроде следующего, вероятно, лучше всего:

local content = 0 
local function loop1() 
    content = content + 1 
end 

timer.Create("myloop", 1, 0, loop1) 
+0

Большое спасибо за быстрый ответ. Мне нравится делать эксперименты. Я применяю его немедленно. Благодарим вас за такую ​​же возможность отредактировать мой пост. Существует разница в производительности написания этого пути? – Walfrid

+2

Эта небольшая часть кода, вероятно, так же хороша, как вы можете ее получить, но, как сказал @BenGrimm в комментарии к op, этот запах ужасно похож на преждевременную оптимизацию. Вероятность этого в долгосрочной перспективе невелика, особенно если ваша функция ничего не делает из реальной полезности. –

+0

Я не знаю другого метода. Обозначения: 0 в timer.Create = бесконечный цикл. 1 в timer.Create = запуск функции, 1 раз в секунду. Содержимое функции упрощается чем-то, что не кажется полезным для базы. Но меня интересует основной метод. – Walfrid

Смежные вопросы