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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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:
Близы недавно резали доступ к используемым в той наработке функциям, в процессе борьбы с десинками, так что не факт что она еще работает
Аллоу???
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.