Добавлен konvan5
Старая тема на новой платформе. Попробовал переделать старый алгоритм отлова утечек с jass на LUA, но утечки вообще не устраняются а из-за проверки даже добавляются. Проделал много экспериментов и так и не понял, хэндлы вообще уничтожаются либо нет. Либо просто счетчик идет только вперед а назад не возвращается. То есть при создании нового объекта создается хэндл больше чем максимальный хэндл, который был в игре (как я понял).
Вот мой код на LUA для отлова утечек.
sizehc = 50
HandleCounter_Update = function()
local i
local id
local P = {}
local result = 0
local min = -1
for i = 1, sizehc do
P[i] = Location(0,0)
id = GetHandleId(P[i])
id = id - 0x100000
if min == -1 then
min = id;
end
if id > result then
result = id
elseif id < min then
min = id
end
end
if result - min > sizehc then
result = min
else
result = result - sizehc
end
for i = sizehc, 1, -1 do
RemoveLocation(P[i])
P[i] = nil
end
LeaderboardSetItemValue(udg_HandleBoard, 0, R2I(result))
end
function HandleCounterScriptGo()
udg_HandleBoard = CreateLeaderboard()
LeaderboardSetLabel(udg_HandleBoard, "Handle Counter")
PlayerSetLeaderboard(GetLocalPlayer(), udg_HandleBoard)
LeaderboardDisplay(udg_HandleBoard, true)
LeaderboardAddItem(udg_HandleBoard, "Handles", 0, Player(0))
LeaderboardSetSizeByItemCount(udg_HandleBoard, 1)
HandleCounter_Update()
TimerStart(CreateTimer(), 0.5, true, HandleCounter_Update)
end
была еще более простая версия без min и sizehc, но там проблема та-же
А вот и эта другая версия функции HandleCounter_Update, упрощенная
HandleCounter_Update = function()
local i
local id
local P = {}
local result = 0
for i = 1, 50 do
P[i] = Location(0,0)
id = GetHandleId(P[i])
result = result + (id-0x100000)
end
result = result/50-25
for i = 50, 1, -1 do
RemoveLocation(P[i])
P[i] = nil
end
LeaderboardSetItemValue(udg_HandleBoard, 0, R2I(result))
end
В чем же может быть проблема? Неправильно удаляю утечки? Неправильно пытаюсь их найти? Может механизм создания хэндлов и правда изменился в рефордже и я этого не понял.
Вопрос был задан 1 апреля, но вопрос серьезный, вчера весь день просидел с ним, спасибо за понимание :)
Вопрос был задан 1 апреля, но вопрос серьезный, вчера весь день просидел с ним, спасибо за понимание :)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован konvan5
Пускай показывает немного в других единицах, но суть схожая, очень поможет!
Ручную сборку мусора вырезали, я это сказал в 12 посте