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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
25
Hate:
если ты используешь гуи, тебя утечки должны волновать в последнюю очередь, если на коде - то как я уже написал, создал объект, удалил объект.
А как понять, что объект удалился? Как проверить? Если я новичок и не доверяю функциям удаления. Смысл в этом.
7
konvan5:
Hate:
если ты используешь гуи, тебя утечки должны волновать в последнюю очередь, если на коде - то как я уже написал, создал объект, удалил объект.
А как понять, что объект удалился? Как проверить? Если я новичок и не доверяю функциям удаления. Смысл в этом.
отслеживай через диспетчер задач потребление памяти WarCraft'ом.
22
вроде у луа еше не завезли автосборшик мусора вам надо его вручную написать
33
pro100master, здрасте приехали, наоборот выпилили ручную сборку мусора, оставили только автоматику
26
konvan5:
Hate:
если ты используешь гуи, тебя утечки должны волновать в последнюю очередь, если на коде - то как я уже написал, создал объект, удалил объект.
А как понять, что объект удалился? Как проверить? Если я новичок и не доверяю функциям удаления. Смысл в этом.
а почему он не должен удалиться?
29
Это из разряда бухгалтеров, которые пытаются проверить компьютер на правильность вычислений...
13
Встаёт вопрос о том, что ты предпримешь узнав о количестве хендлов, если не доверяешь функциям удаления? Есть какой-то другой магический способ их удалять?

В аналогии с бухгалтером, ты хотя бы сам посчитать сможешь, а тут вообще бессмыслица какая-то получается.
25
NekoriDes:
Встаёт вопрос о том, что ты предпримешь узнав о количестве хендлов, если не доверяешь функциям удаления? Есть какой-то другой магический способ их удалять?
Да это я уже на крайности перешел, ибо люди не пытались ответить на вопрос, а спрашивали, зачем надо и твердили о простой истине - иди и удаляй. Но мы не все перфекционисты, часто ленивы или забывчивы, из-за чего можем не всегда сразу удалять объекты, когда это надо. Поэтому такая система была бы неким контроллером, что все идет ок и нигде не начинается собираться свалка невидимого мусора.
13
konvan5:
NekoriDes:
Встаёт вопрос о том, что ты предпримешь узнав о количестве хендлов, если не доверяешь функциям удаления? Есть какой-то другой магический способ их удалять?
Да это я уже на крайности перешел, ибо люди не пытались ответить на вопрос, а спрашивали, зачем надо и твердили о простой истине - иди и удаляй. Но мы не все перфекционисты, часто ленивы или забывчивы, из-за чего можем не всегда сразу удалять объекты, когда это надо. Поэтому такая система была бы неким контроллером, что все идет ок и нигде не начинается собираться свалка невидимого мусора.
Так ведь счётчик хендлов тут вряд ли поможет. Т.е. ты всё равно не знаешь где именно ты забыл удалить очередной и тебе придётся делать код ревью. Короче говоря, знание КОЛИЧЕСТВА не даёт тебе ничего вообще.

Не представляю даже область его применения в 1.26-.

Если только в качестве демонстрации каких-нибудь сложных систем.
25
NekoriDes:
Так ведь счётчик хендлов тут вряд ли поможет. Т.е. ты всё равно не знаешь где именно ты забыл удалить очередной и тебе придётся делать код ревью. Короче говоря, знание КОЛИЧЕСТВА не даёт тебе ничего вообще.

Не представляю даже область его применения в 1.26-.

Если только в качестве демонстрации каких-нибудь сложных систем.
Как раз таки дает, ибо код, который я предоставил - обновляется ежесекудно и зная, видя, в какой момент они растут сильно - легко можно определить, в какой системе недосмотрел. Даже если прибавка идет относительно медленно - периодичность все равно во время игры можно связать с игровым фактором (тот-же спавн юнитов, особый скил или еще какая система). Что в разы облегчает полное ревью кода.
Применял еще 5 лет назад на джассе, было удобно, когда видишь, как память забита.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.