XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Старый 05.03.2011, 18:59
XyZoD

offline
Опыт: 2,073
Активность:
Не знаю как такое возможно, сам погляди в гран при азерота нечего не обнуляется и всё летает хотя там мультиборд каждую секунду обновляется, а карта как ела 240 мб так и ест 240 и лагов нету. ну вот я и пишу обнулять нужно, но только то для чего есть оператор destroy и при помощи его же и обнулять, как в си delete и т.д.
Старый 05.03.2011, 19:00
Myth
The Temple
offline
Опыт: 19,141
Активность:
papapa071, ты можешь это проверить используя GetHandleId :)
Старый 05.03.2011, 19:03
XyZoD

offline
Опыт: 2,073
Активность:
Что это даст? Покажет мне хэндл объекта? в любом случае значение будет увеличиватся, 1000000000-1237895358, объект был создан, для выделилась ячейка памяти, в которую он был записан, и так есть число в любом случае увеличится. Вообще на мой взгляд item unit trigger и ещё некоторые переменные движок примет как int или float, которые обнулять не надо, а вот например group или timer как char, который надо удалить, но я не кого не призываю это делать, это просто моё мнение

Отредактировано papapa071, 05.03.2011 в 19:12.
Старый 05.03.2011, 19:06
Myth
The Temple
offline
Опыт: 19,141
Активность:
в этой карте безудержный рост этого значения будет показывать именно на утечки.
к тому же карта расчитана не на долгое время игры и сама по себе небольшая,
вот близзы и не парились.
delete (и new) используются в С++ для работы с динамической памятью (чтобы избежать преждевременной смерти объектов, которые там пусть хоть локальные или глобальные дохнут при выходе за рамки области действия их имени)
Myth добавил:
и ты правильно думаешь что в варе нету типов юнит, итем :)
Myth добавил:
в варике же объекты остаются в памяти с надеждой что к ним ещё обратятся ))
Старый 05.03.2011, 19:16
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
хендлы обнуляются не гони
Старый 05.03.2011, 19:19
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
papapa071, через память на той карте проверять имхо глупо. Сделай такой тест.
Вставь этот код в любую карту и запусти (ПС нид JNPG)
с 88 до 200 за пол минуты
Код:
library faikLib initializer Initlib
 globals
  unit u
 endglobals
 private function onTimer takes nothing returns nothing
  local group g 
  local timer t
  local timer expt = GetExpiredTimer()
  set g = CreateGroup()
  call GroupAddUnit(g,u)
  call DestroyGroup(g)
  set t = CreateTimer()
  call TimerStart(t,0.001,true,function onTimer)
  call DestroyTimer(expt)
 endfunction
 private function Initlib takes nothing returns nothing
  local timer t = CreateTimer()
  call TimerStart(t,0.001,true,function onTimer)
 endfunction
endlibrary


alexprey добавил:
Оо за минуту уже за гиг забралось
Старый 05.03.2011, 19:21
XyZoD

offline
Опыт: 2,073
Активность:
Получается разработчики допустили огромную ошибку, возможно они не думали что люди так увлекутся ве...
хотя, ты не заметил если делать set t = null то память продолжит увеличиваться?)

Отредактировано papapa071, 05.03.2011 в 19:39.
Старый 05.03.2011, 19:27
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
((код cpp
typedef struct {long handleID;} handle;
))
Старый 05.03.2011, 19:29
XyZoD

offline
Опыт: 2,073
Активность:
library faikLib initializer Initlib
globals
unit u
endglobals
private function onTimer takes nothing returns nothing
local group g
local timer t
local timer expt = GetExpiredTimer()
set g = CreateGroup()
call GroupAddUnit(g,u)
call DestroyGroup(g)
set g = null
set t = CreateTimer()
call TimerStart(t,0.001,true,function onTimer)
call DestroyTimer(t)
set t = null
call DestroyTimer(expt)
set expt = null
endfunction
private function Initlib takes nothing returns nothing
local timer t = CreateTimer()
call TimerStart(t,0.001,true,function onTimer)
endfunction
endlibrary

Поставил я null, память увеличивается в том же темпе)
Старый 05.03.2011, 19:46
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
papapa071, у меня намного меньше. Постом выше что такое handle в c++ (выдрал из вара)
Старый 05.03.2011, 19:51
XyZoD

offline
Опыт: 2,073
Активность:
Всё равно получается утечки будут всегда и не как от них не избавишся, получается это не утечки а так и должно быть. у меня в твоём случае за 5 мин съел 80 мб в моём с null также, вообще на мой взгляд в варе, утечки это то когда кастанул спелл и после него фпс значительно уменьшается, в основном изза неудалённых таймеров
Старый 05.03.2011, 19:54
Hanabishi
COOL STATUS
offline
Опыт: отключен
papapa071, false, утечки вызывают только кривые руки
Старый 05.03.2011, 20:01
XyZoD

offline
Опыт: 2,073
Активность:
Hanabishi, выше посты читай и посмотри разницу между этими 2 кодами, и попробуй хоть каким то способом убрать увеличение памяти
Старый 05.03.2011, 20:03
Hanabishi
COOL STATUS
offline
Опыт: отключен
library faikLib initializer Initlib
    globals
        unit u
    endglobals
    
    private function onTimer takes nothing returns nothing
        local group g = CreateGroup()
        local timer expt = GetExpiredTimer()
        
        call GroupAddUnit(g,u)
        call GroupClear(g)
        call DestroyGroup(g)
        
        set expt = null
        set g = null
    endfunction
    
    private function Initlib takes nothing returns nothing
        local timer t = CreateTimer()
        call TimerStart(t,0.001,true,function onTimer)
        set t = null
    endfunction
endlibrary
Старый 05.03.2011, 20:13
XyZoD

offline
Опыт: 2,073
Активность:
за 15 сек 13 мб, нет утечек?
Старый 05.03.2011, 20:16
Hanabishi
COOL STATUS
offline
Опыт: отключен
papapa071, ты кривой
library faikLib initializer Initlib
    globals
        unit u
    endglobals
    
    private function onTimer takes nothing returns nothing
        local group g = CreateGroup()
        local timer expt = GetExpiredTimer()
        
        call GroupAddUnit(g,u)//если юнит не создан, то функция не работает с этого момента, поток крашится
        call GroupClear(g)
        call DestroyGroup(g)
        //поэтому переменные НЕ обнуляются
        set expt = null
        set g = null
    endfunction
    
    private function Initlib takes nothing returns nothing
        local timer t = CreateTimer()
        call TimerStart(t,0.001,true,function onTimer)
        set t = null
    endfunction
endlibrary
кури пример
а после извинись и убей себя об стену
Прикрепленные файлы
Тип файла: w3x 1.w3x (15.7 Кбайт, 18 просмотров )
Старый 05.03.2011, 20:43
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 16:25.