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

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

Ответ
 
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
да что вы все спорите, чистить надо вручную, если хотите, чтобы был порядок в вашем коде и логике его работы.
ScorpioT1000, док просто привык, что не надо за собой подбирать
Старый 04.09.2012, 19:59
Doc

offline
Опыт: 63,163
Активность:
alexprey, ммм нет как бы удалять объекты я привык, это очень даже удобно, иногда даже удобней чем GC, но необнуление по сути утечкой не является и даже до конца не доказано, что оно влияет на быстродействие.
Старый 04.09.2012, 20:14
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Doc, ну точно да сказать нельзя как там сделано на самом деле сделано, это надо дизасмить код движка и разбираться в нем, как там происходит выделение локальных переменных. Но мне кажется там что то типа GC, который освобождает ячейки переменных, когда они находятся в null состоянии, и эту ячейку он сможет заюзаеть повторно потом. Хотя хз, но мне так кажется
Старый 04.09.2012, 20:26
Doc

offline
Опыт: 63,163
Активность:
alexprey, ну я как бы еще на старом компе оставлял гейм ботов друг с другом, все спеллы юзались итд итп и уходил на 4-6 часов. Приходил, шел трехсотый раунд игры, падения фпс не было. Локалки чистил сжасс.
Старый 04.09.2012, 20:33
ScorpioT1000
Работаем
offline
Опыт: отключен
Причем тут фпс, скока памяти было занято?) TcX жрет пару килобайт в минуту после достаточной аллокации насколько я замечал. Это типа изза ордеров
Старый 04.09.2012, 20:51
adic3x

offline
Опыт: 108,439
Активность:
Обнуление таки сбрасывает счетчик ссылок объекта. Хотя Крок и говорил мне, что оно делается автоматически, возможно это - баг. Или он что то перепутал при его обратной инженерии.
Флуш в последней версии (та, что на гуглокоде) работает вполне корректно. В любом случае просто загляните в файл optimized_war3map.j, что в корневой директории адика, и Вы получите ответ на свой вопрос.
С другой стороны, Вы можете что угодно обнулить вручную, в таком случае также адик не поставит лишнего обнуления. И если в коде проставлены обнуления - адик опять-же их не продублирует.
Обнуление работает по принципу "лучше обнулить лишнее, чем не обнулить что-то нужное". Хотя на факте лишних обнулений в реальном коде крайне мало. Тем более, что они не сказываются на быстродействии в целом. Не обнуленных локальных переменных метод не допускает.
Также есть фишка, которая помечает переменную, как не нуждающуюся в обнулении:
var = null_cjnullex;
ADOLF добавил:
void foo() {
    unit doc = CreateDoc()
    string docname = GetDocName()
    ASSERT( doc != null && docname != null )
    StoreUnit(cache, "mymap", docname, doc)
}
Debug: foo: doc != null && docname != null failed
А что тут не так? Я не понял.
Старый 04.09.2012, 21:43
ScorpioT1000
Работаем
offline
Опыт: отключен
ассерт вызывает I2R(2/0)
Старый 04.09.2012, 22:30
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, занято не занято, а гиг памяти бы выжрало если бы текло серьезно.
Ну всмысле на том компе стоял гигабайт памяти у меня, отнять еще винду и всякую фигню получится немного.
Старый 04.09.2012, 22:37
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ScorpioT1000, проблема вашей системы вот в чем
local unit u = <какая то функция которая получает юнита>
local DataStruct struct = DataStruct.New() //тут дофига всего происходит
//куча действий
ASSERT( u != null )
call struct.Destroy();
set u = null
а теперь внимание, функция возвращает null, происходит обрыв потока, код дальше не выполняется, struct не освобождает ячейку, пофиг уже на то, что u не нулиться. А теперь это все в таймере, функция постоянно начинает глючить и выдавать все время null, после 8к раз валиться аллокация структуры, по мимо того, еще кучу данных не зачистилось из этой структуры.
Старый 04.09.2012, 22:39
ScorpioT1000
Работаем
offline
Опыт: отключен
Я о том и говорил доку.
Именно поэтому такие ассерты юзаются тока в критических вещах, а я юзаю IFDEBUG с простым return, там cjass очищает всё =)
Старый 04.09.2012, 23:07
jeffz

offline
Опыт: 104
Активность:
Спасибо за ответы.
Старый 05.09.2012, 08:07
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Doc:
Имхо оно работает ДОСТАТОЧНО стабильно. У меня в последних картах/спеллах нет обнулений и все стабильно, все работает, ничего не тормозит и не течет, проводились многочасовые тесты.
А дебагом проверял? :)
а у меня гарбаж коллектор, мне вообще строго пофиг на утечки объектов :nate:
Faion добавил:
alexprey:
когда они находятся в null состоянии, и эту ячейку он сможет заюзаеть повторно потом. Хотя хз, но мне так кажется
Тебе правильно кажется. Грубо говоря все это представляет собой массив. В котором хранятся хендлы на объекты и сами объекты. При освобождении ячейки, следующий же новый объект\хендл будет записан в эту пустую ячейку.
Старый 05.09.2012, 11:17
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Там сделано как-то так
type 
	Jass_handle = record
		handleID: LongInt;
	end;

	Jass_event = Jass_handle;
	Jass_player = Jass_handle;
	Jass_widget = Jass_handle;
	Jass_unit = Jass_widget;
Старый 05.09.2012, 12:14
ScorpioT1000
Работаем
offline
Опыт: отключен
При освобождении ячейки, следующий же новый объект\хендл будет записан в эту пустую ячейку.
Че за гонево? Лол. Список индексов свободных ячеек? Не, не слышали.
Старый 05.09.2012, 13:59
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Че за гонево? Лол. Список индексов свободных ячеек? Не, не слышали.
Да ты и про #ифы внутри дефайнане слышал, и про то что нельзя использовать русские названия для дефайнов, и варовские хт у тебя имеют прямую адресацию o/
Учи мат часть.
Старый 05.09.2012, 16:34
ScorpioT1000
Работаем
offline
Опыт: отключен
Ты просто не знаешь банальных вещей и придумываешь какое-то непрактичное говно, да ещё и других учишь этому =)
ScorpioT1000 добавил:
Для особо непонятливых: если ячейка освобождается, она (её индекс в настоящем массиве) добавляется в очередь и это значит, что при надобности будет заюзана не именно эта ячейка, а первая в очереди.
Старый 05.09.2012, 16:47
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, если ячеек немного, то итак сойдет. Вообще если не критичен индекс то можно последний перемещать в пустую. Хотя у меня в игре реализовано именно списком свободных.
Старый 05.09.2012, 16:58
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
ScorpioT1000 добавил:
Для особо непонятливых: если ячейка освобождается, она (её индекс в настоящем массиве) добавляется в очередь и это значит, что при надобности будет заюзана не именно эта ячейка, а первая в очереди.
Ну я как бы это и имелл ввиду.
Старый 05.09.2012, 17:15
ScorpioT1000
Работаем
offline
Опыт: отключен
Кстати на вики неверна реализация - никакого for быть не должно. Всё работает напрямую.
Старый 05.09.2012, 17:35
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
придумываешь какое-то непрактичное говно
Бтв да, пруф? =)
Старый 05.09.2012, 17:39
Ответ

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

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

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

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



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