Утечки
|
|
kordloperdlo | Дата: Воскресенье, 16 Марта 2014, 02:19:53 | Сообщение # 1 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
| Доброе время суток, подскажите есть ли какой либо код на GUI для подсчёта утечек, то-есть не проверку имеются ли утечки в карте, а они есть наверное лично за триггера нечего не говорю т.к. к каждому почти триггеру я добавил в конец: Игра: Показывать (все игроки): Название используемого триггера спасибо за внимание.
|
|
|
|
GodOfDead | Дата: Воскресенье, 16 Марта 2014, 04:07:02 | Сообщение # 2 |
7 уровень
Группа: Проверенные
Сообщений: 302
Награды: 0
Репутация: 115
Блокировки:
| А не проще удалить все утечки вручную? (Сразу удалять все спецэффекты, не использовать wait...)
Если ты не знаешь кто это ---> , то ты оочень многое упустил в своей жизни...
|
|
|
|
SirNikolas | Дата: Воскресенье, 16 Марта 2014, 07:48:14 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата kordloperdlo ( ) Игра: Показывать (все игроки): Название используемого триггера Э-э-э... А зачем, если не секрет? И еще вопрос: что такое утечки памяти (в твоем понимании)?
|
|
|
|
Extremator | Дата: Воскресенье, 16 Марта 2014, 10:49:27 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата kordloperdlo ( ) подскажите есть ли какой либо код на GUI для подсчёта утечек SHIFT + CTRL + DELETE вкладка "Процессы" и смотришь как ростёт потребление памяти
|
|
|
|
SirNikolas | Дата: Воскресенье, 16 Марта 2014, 11:32:48 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата Extremator ( ) SHIFT + CTRL + DELETE Ctrl + Shift + Esc / Ctrl + Alt + Del
|
|
|
|
Melodia | Дата: Воскресенье, 16 Марта 2014, 13:02:42 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5051
Блокировки:
| на хгм была карта, называется Sonic platformer, В ней сбоку отобрадается счётчик утечек. Я незнаю, насколько хорошо там считается, но можешь попробовать поковырять её. По мере игрового процесса их число не только растёт, но и уменьшается, поддерживая уровень порядка 1700, начиная с 1200 где-то.
|
|
|
|
SirNikolas | Дата: Воскресенье, 16 Марта 2014, 15:06:26 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Код library LeakChecker { private int StartOffset;
int LeakChecker() { timer t = CreateTimer(); int id = GetHandleId(t); DestroyTimer(t); return id - StartOffset; }
callback onInit() { timer t = CreateTimer(); StartOffset = GetHandleId(t); DestroyTimer(t); } }
|
|
|
|
kordloperdlo | Дата: Воскресенье, 16 Марта 2014, 19:34:29 | Сообщение # 8 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
| Цитата SirNikolas ( ) Э-э-э... А зачем, если не секрет? если проверяю триггер что-бы видеть используется с ним ещё какой или нет, работоспособность и т.п. Цитата SirNikolas ( ) И еще вопрос: что такое утечки памяти (в твоем понимании)? хвосты в карте, то-есть эффекты, невидимые объекты добавляемые триггерным путём или ещё каким и не удалены сразу, и т.п.
Цитата SirNikolas ( ) Код library LeakChecker { private int StartOffset;
int LeakChecker() { timer t = CreateTimer(); int id = GetHandleId(t); DestroyTimer(t); return id - StartOffset; }
callback onInit() { timer t = CreateTimer(); StartOffset = GetHandleId(t); DestroyTimer(t); } } а это что такое? Melodia, спасибо глянем.
|
|
|
|
SirNikolas | Дата: Воскресенье, 16 Марта 2014, 21:30:25 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата kordloperdlo ( ) а это что такое? Периодически вызывай функцию LeakChecker (Custom script: set udg_Integer = LeakChecker(), где Integer - глобальная переменная) и выводи возвращаемое число.
При создании объекта он получает уникальный номер (ID). "Уникальный" означает, что в один момент времени не могут существовать два объекта с одинаковыми ID. При запросе на выделение ID возвращается наименьший свободный, но не меньший 0x1000000. Т. е. сначала закрываются "дырки" от удаленных объектов, а потом ID продолжают выдаваться последовательно.
Функция в предыдущем посте создает новый объект (таймер), получает его ID, тут же его удаляет, после чего вычитает из него ID объекта, созданного при инициализации. Таким образом, получаем число, которое может быть количеством созданных объектов с момента начала игры. А может и не быть.
|
|
|
|
Overkills | Дата: Воскресенье, 16 Марта 2014, 23:19:50 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 1785
Награды: 0
Репутация: 880
Блокировки:
| Melodia, у меня 10к показывало.
|
|
|
|
kordloperdlo | Дата: Понедельник, 17 Марта 2014, 04:00:52 | Сообщение # 11 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
| ну создал я новый триггер с именем test, сделал его по верх всех, перевёл в jass вставил туда твой код: Код library LeakChecker { private int StartOffset;
int LeakChecker() { timer t = CreateTimer(); int id = GetHandleId(t); DestroyTimer(t); return id - StartOffset; }
callback onInit() { timer t = CreateTimer(); StartOffset = GetHandleId(t); DestroyTimer(t); } } и меня WE послал так далеко с ошибками о не завершении кода что аш голова зашаталась....
|
|
|
|
SirNikolas | Дата: Понедельник, 17 Марта 2014, 16:42:28 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Для работы нужен JASS NewGen Pack.
|
|
|
|
kordloperdlo | Дата: Вторник, 18 Марта 2014, 01:04:29 | Сообщение # 13 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
| а без него какнибуть?
|
|
|
|
SirNikolas | Дата: Вторник, 18 Марта 2014, 19:32:07 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| В нестандартный код.Код function LeakChecker takes nothing returns integer local timer t = CreateTimer() local integer id = GetHandleId(t) call DestroyTimer(t) set t = null return id - udg_LeakChecker__StartOffset endfunction В триггер с названием "LeakChecker". Название должно совпадать с точностью до регистра!Код function InitTrig_LeakChecker takes nothing returns nothing local timer t = CreateTimer() set udg_LeakChecker__StartOffset = GetHandleId(t) call DestroyTimer(t) set t = null endfunction Создать целочисленную переменную LeakChecker__StartOffset (в названии два подчеркивания: показываем, что переменная приватная).
И что легче сделать?
|
|
|
|
kordloperdlo | Дата: Вторник, 18 Марта 2014, 19:55:29 | Сообщение # 15 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
| SirNikolas, я про то, что-бы не использовать Jass New Gen Pack, по иному как нибуть то бишь по стандарту
|
|
|
|
SirNikolas | Дата: Среда, 19 Марта 2014, 19:46:48 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Код из поста №14 не требует JNGP, однако манипуляций для его использования нужно в разы больше.
|
|
|
|