Сейчас 20:32:02 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Утечки
kordloperdloДата: Воскресенье, 16 Марта 2014, 02:19:53 | Сообщение # 1
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
Доброе время суток, подскажите есть ли какой либо код на GUI для подсчёта утечек, то-есть не проверку имеются ли утечки в карте, а они есть наверное :)
лично за триггера нечего не говорю т.к. к каждому почти триггеру я добавил в конец:
Игра: Показывать (все игроки): Название используемого триггера
спасибо за внимание.



[spoiler]


[/spoiler]
 

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 где-то.


CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

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, спасибо глянем.



[spoiler]


[/spoiler]
 

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к показывало. trollface

 

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 послал так далеко с ошибками о не завершении кода что аш голова зашаталась.... :) :(



[spoiler]


[/spoiler]
 

SirNikolasДата: Понедельник, 17 Марта 2014, 16:42:28 | Сообщение # 12
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Для работы нужен JASS NewGen Pack.

 

kordloperdloДата: Вторник, 18 Марта 2014, 01:04:29 | Сообщение # 13
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 5
Блокировки:
а без него какнибуть?


[spoiler]


[/spoiler]
 

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, по иному как нибуть то бишь по стандарту


[spoiler]


[/spoiler]
 

SirNikolasДата: Среда, 19 Марта 2014, 19:46:48 | Сообщение # 16
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Код из поста №14 не требует JNGP, однако манипуляций для его использования нужно в разы больше.

 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz