Создал систему отрядов, обратился на этот ресурс за помощью на этот ресуср в результате чего была выявлена новая более страшная опасность для карты, это большое количество утечек со старта игры на карте через UjAPI: Handle Counter, при загрузке карты были обнаружены 10 000 утечек, не могу выявить и даже не знаю как причины этих утечек и устранить их, может кто то может помочь. Помогите установить причину хэндл утечек со старта игры и устранить их.
Извиняюсь за первую версию карты, она была не правильной.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
Я ж уже не раз писал, важно не само количество хэндлов, а динамика их роста. Если значение колеблется вокруг некоего числа, то можно забить болт. Если же улетает в космос, то нужно бить тревогу.
И неплохо бы ссылку на UjAPI: Handle Counter привести, чтоб люди не искали.
6
В общем ситуация следующая, после того как удалил в триггере отвечающий за перемещение отряда несколько переменных оставшиеся от изначальной версии системы и не несущие никакого смысла более того не стирающиеся в триггере после выполнения своих функций, рост хэндлов после отдачи приказов отрядам пропал, что гигантски хорошо.
Помимо вышеописанного, я ради интереса не стал удалять по одному триггеру, а удалил абсолютно все (чистый лист рт), проверил, точно такое же кол-во стартовых хэндлов какое и было до удаления абсолютно всех триггеров.
Чем больше карта - тем больше кол-во стартовых хэндлов, но как то не в соизмеримых пропорциях. На карте 64x64 с маленьким кол вом декораций хэндлов аж почти под 7000, в то время как на карте 127x127 с явно большим кол-вом декораций их всего за 10 000.
Теперь остается выяснить что же из триггеров заставляет расти хэндлы на +1 после подготовки каждого юнита.

После полного уничтожения отряда кол-во хэндлов становится меньше стартового.

Извиняюсь, после удаления абсолютно всех триггеров кол-во стартовых хэндлов упало с 6987 до 6449, это скорее всего из за раставленых отрядов в которых юниты записаны в определенные переменные. После уничтожения отряда переменные отрядов очищаются в связи с чем общее кол-во хендлов и падает ниже стартового показателя.
30
Чем больше карта - тем больше кол-во стартовых хэндлов, но как то не в соизмеримых пропорциях. На карте 64x64 с маленьким кол вом декораций хэндлов аж почти под 7000, в то время как на карте 127x127 с явно большим кол-вом декораций их всего за 10 000.
Ну так 3000 декораций это не мало.
После полного уничтожения отряда кол-во хэндлов становится меньше стартового.
Потому что после разложения юнитов их хэндлы освобождаются и переиспользуются.
Теперь остается выяснить что же из триггеров заставляет расти хэндлы на +1 после подготовки каждого юнита.
30
Как удалить утечку созданного юнита?
function DoSomething takes nothing returns nothing
		local unit u = CreateUnit( Player( 0 ), 'hpea', 0., 0., 270. )
		....
		set u = null
endfunction
6
Еще крайне неприятный факт, когда создается отряд 12 юнитов, то хэндлы повышаются с 6812 до 6835, но при полном уничтожении отряда хэндлы падают даже не до 6812, а до 6823, на 11 больше остается чем было, что страшно.

Jass MythBusters
Спасибо. Но есть ли способ на гуи?

function DoSomething takes nothing returns nothing
local unit u = CreateUnit( Player( 0 ), 'hpea', 0., 0., 270. )
....
set u = null
endfunction
это способ вернуть цвет юниту после применения перевоплощения? только в коде определенные параметры цвета, а нужны параметры умирающего юнита.
23
это способ вернуть цвет юниту после применения перевоплощения? только в коде определенные параметры цвета, а нужны параметры умирающего юнита.
Это игрок 0, ид юнита, координаты х, у, угол поворота.
Утечка убирается через set u = null.
30
Еще крайне неприятный факт, когда создается отряд 12 юнитов, то хэндлы повышаются с 6812 до 6835, но при полном уничтожении отряда хэндлы падают даже не до 6812, а до 6823, на 11 больше остается чем было, что страшно.
Хэндл юнита очищается после окончания разложения. Ты подождал?

Спасибо. Но есть ли способ на гуи?
Возможно есть, только я его не знаю.
30
Насколько я помню, в JNGP ещё не пробросили создание юнита нативкой. Посему придётся создавать юнита в Location, которая скорей всего утечёт.
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction
И или присваивать результат группе, которая скорей всего утечёт или создавать по одному и забирать через bj_lastCreatedUnit. Можно конечно воспользоваться CustomCode, но тогда весь гуй превратится в текстовый файл с неудобным редактированием. Оно тебе надо?
28
вар крашается если что примерно на 1.2кк утечек (а точнее реальной нагрузки на вар, 1.2к мб), так что 10к это мелочь и вероятно это тупо деструкты, юниты, предметы и глобальные переменные которыми всегда пользуешься, тут не над чем париться, главное, как указали выше, следить за динамикой роста
6
Посему придётся создавать юнита в Location, которая скорей всего утечёт.
Подозреваю что, как писал выше, после иничтожения отряда падает кол во хэндлов но все равно остается на 11 больше прежнего значения до создания этого отряда из 12 юнитов, это 11 остающихся хэндлов и есть юниты не командиры 12 юнитового отряда где 12й это командир, которые добавляются созданному юниту командиру триггерно, но они добавляются на точку рядом с командиром которая выше у меня установленна в переменную и удаляется сразу после действия создания юнита в этой точке, так почему же ее хэндл не удаляется?

12 хэндл, по всей видимости от командира который создается в строении естественным путем, как появляется, так и исчезает после разложения его скелета после смерти, скелеты в моей системе лежат 5 сек, это для значительного снижения нагрузки на движ вара.

вар крашается если что примерно на 1.2кк утечек (а точнее реальной нагрузки на вар, 1.2к мб)
крашится, ты имеешь в виду только начинает лагать, или вылетает?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.