Старая тема на новой платформе. Попробовал переделать старый алгоритм отлова утечек с 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 апреля, но вопрос серьезный, вчера весь день просидел с ним, спасибо за понимание :)

konvan5, я помню еще эту поможет ли она тебе неизвестно
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
12
Hate:
а можно сразу думать об удалении мусора
а то получается, создал себе проблему, а затем героически ее решаешь
опять же, сразу нельзя решать ее?
Это из разряда "дебаг не нужен, просто пишите код без ошибок с первого раза".
25
Sergarr:
Это из разряда "дебаг не нужен, просто пишите код без ошибок с первого раза".
Именно! ;)
13
Хендлкаунтер и дебаг так себе связаны. Ты ведь не отлаживаешь сразу всё, а отдельные части? Просто проблема и её решение высосаны из пальца. Тут явно имеет место быть некомпетентность программиста, а не реальная нужда в инструменте.
(и это тебе жабаскрипт макакен говорит, который дальше скриптовых языков не заходил, задумайся!)
27
На сайте НазерПанк выкладывал наработку LUA определения утечек.

Еще кучу ссылок кидали на LUA

NekoriDes, это только опытные люди знают, где утекает. Как оптимизировать.
ну счетчик просто показывает увеличиваются ли хэндлы. Не жрет ли много код. Если где-то не предусмотрел, и че-то не оптимизировал, то может проверить. Часто бывает полезен метод исключения. Эту часть кода выключил, посмотрел перестало утекать, стало ли меньше. Значит там утекает. Смысл в том, чтобы посмотреть сколько хэндлов на карте, использовать меньше объектов, где-то сократить.
26
утекает там где ты не удаляешь объекты. это абсолютно прозрачный и логичный процесс, не удалил уже ненужный объект - он утекает, для этого не нужно иметь семь пядей в лбу.
тем более что дебаг и утечки связаны не более чем как никак, так что сравнение неуместное совершенно
18
А что в lua нет проблемы циклических ссылок?
25
Steal nerves:
На сайте НазерПанк выкладывал наработку LUA определения утечек.
Спасибо, нашел эту статейку. Вдруг кому еще пригодится.
27
konvan5, я помню еще эту поможет ли она тебе неизвестно
Принятый ответ
25
Steal nerves:
konvan5, я помню еще эту поможет ли она тебе неизвестно
Уважаемый, вы ответили чисто на поставленный вопрос, спасибо :)
Пускай показывает немного в других единицах, но суть схожая, очень поможет!
24
Вот только есть два нюанса.
  1. Память луа машины и память занимаемая хендлами вара это совершенно разные вещи, практически не связанные между собой.
  2. Близы недавно резали доступ к используемым в той наработке функциям, в процессе борьбы с десинками, так что не факт что она еще работает.
25
prog:
Вот только есть два нюанса.
  1. Память луа машины и память занимаемая хендлами вара это совершенно разные вещи, практически не связанные между собой.
  2. Близы недавно резали доступ к используемым в той наработке функциям, в процессе борьбы с десинками, так что не факт что она еще работает.
Хм, вот как, спасибо за информацию, еще не проверял тот код
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.