Старая тема на новой платформе. Попробовал переделать старый алгоритм отлова утечек с 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, я помню еще эту поможет ли она тебе неизвестно
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
27
4 года назад
Отредактирован MpW
2
На сайте НазерПанк выкладывал наработку LUA определения утечек.

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

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