Созданные экземпляры класса не освобождаются при выходе из области видимости, не могу вдуплить почему так? Стандартный Lua код, везде работает а в warcraft'e проблема.
.если заменять объявление класса на численную переменную то работает всё нормально
myClass = {}
function myClass:new( )
local obj = {}
obj.x = 0.0
obj.y = 0.0
obj.z = 0.0
setmetatable(obj, self)
self.__index = self
return obj
end
function loop()
for i = 1, 9000 do
local a = myClass:new() --- <<<< переменная а навсегда остается в памяти
end
end
function init()
initTrg = CreateTrigger( )
TriggerRegisterTimerEventPeriodic( initTrg, 0.01 )
TriggerAddAction( initTrg, loop )
end
Принятый ответ
- Есть небольшой нюанс - сборщик мусора собирает мертвые объекты когда их количество достигло критического уровня, а не когда они выходят из области видимости. Возможно, что-то мешает ему успешно собрать мусор, например создание 900 тысяч новых объектов в секунду.
- Попробуй нормальный таймер вместо периодик триггера, периодик триггеры известны своей лагучестью.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. Зелёный ёж
Лаги были из-за того что память кончилась.
Дело не в таймере, пробовал и без него.
С помощью этого кода выяснилось что сборщик не успевает запуститься если плодить много объектов
и выяснилась что чем меньше объектов создаю тем чаще он вызывается
Вывод который я сделал: не стоит больше заниматься такой ерундой :D
Это не сильно точно, ибо я не смотрел поведение в других картах.... и проверял я это чисто визуально, на втором мониторе открыт диспетчер задач