Созданные экземпляры класса не освобождаются при выходе из области видимости, не могу вдуплить почему так? Стандартный 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

  1. Есть небольшой нюанс - сборщик мусора собирает мертвые объекты когда их количество достигло критического уровня, а не когда они выходят из области видимости. Возможно, что-то мешает ему успешно собрать мусор, например создание 900 тысяч новых объектов в секунду.
  2. Попробуй нормальный таймер вместо периодик триггера, периодик триггеры известны своей лагучестью.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
15
А каким образом ты определил что она навсегда остается в памяти?
9
GetLocalPlayer:
А каким образом ты определил что она навсегда остается в памяти?
Цикл работает до тех пор пока варкрафт не ляжет.
24
  1. Есть небольшой нюанс - сборщик мусора собирает мертвые объекты когда их количество достигло критического уровня, а не когда они выходят из области видимости. Возможно, что-то мешает ему успешно собрать мусор, например создание 900 тысяч новых объектов в секунду.
  2. Попробуй нормальный таймер вместо периодик триггера, периодик триггеры известны своей лагучестью.
Принятый ответ
7
com23:
prog:
Спасибо работает, теперь использую TimerStart(...)
да и я теперь не буду использоваьт триггеры для таймера а просто таймер функции
9
Поторопился я немного с ответом... вообщем проблема всё еще актуальна :D
запускаю этот же код из C++, работает всё нормально
29
Мне вот интересно, обнуляется ли переменная 'a', если она локальная, может тут есть подвох, и нужно ставить после 'local a = my:Class:new()' 'a = nil'. Или не помогает обнуление a после его объявление и принятия созданного для него класса?
9
KingMaximax:
Не помогает, делал даже что-то вроде деструктора
function myClass:delete()
self.x = nil
self.y = nil
self.z = nil
end
тоже не вышло
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.