Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обмануть мусорщика (http://www.flasher.ru/forum/showthread.php?t=149323)

semenyakinVS 22.01.2011 23:10

Обмануть мусорщика
 
На сколько я знаю, Garbage Collector кушает много процессорного времени.

Какие есть способы его хитрого использования? Знаю, есть, например, пул объектов. А ещё?.. Можно вообще вырубить GC, и удалять объекты вручную, вызывая какие-нибудь его методы?

КорДум 22.01.2011 23:12

Можно обмануть его, сохранив ссылки на все объекты и кучу слушателей к ним ;)

Psycho Tiger 22.01.2011 23:21

Что он там кушает никого не волнует, пока Вы не запускаете шаттл.
Вырубить нельзя, и слава богу.

semenyakinVS 22.01.2011 23:51

Цитата:

Можно обмануть его, сохранив ссылки на все объекты и кучу слушателей к ним
Это можно... Сохранить, и выдавать маленькими порциями на удаление через свою обёртку. Ну, или, опять таки, пул.

А нет возможности спровоцировать его на удаление объекта по ссылке? Взяв на себя обязанность учитывать все конфликты?

Цитата:

Что он там кушает никого не волнует, пока Вы не запускаете шаттл.
Можно сказать, что это предстоит...

mikhailk 22.01.2011 23:57

Тут все это раз десять уже обсуждалось.
Вот такая статья есть: http://easyflash.org/flashlearn/flas...-pamyatyu.html
Еще кое-что в том же духе.

Но, честно говоря, все это от лукавого. На мощных компьютерах это будет незаметно, а на слабых не спасет.

Psycho Tiger 22.01.2011 23:58

Возможности нет.
Что ж Вы там такое делаете что о GC беспокоитесь?

semenyakinVS 23.01.2011 00:05

Цитата:

Сообщение от Psycho Tiger (Сообщение 966928)
Возможности нет.
Что ж Вы там такое делаете что о GC беспокоитесь?

Физический движок пишу. А возможность кое-что сделать есть... По ссылке.

Добавлено через 1 минуту
Цитата:

Сообщение от mikhailk (Сообщение 966927)
Тут все это раз десять уже обсуждалось.
Вот такая статья есть: http://easyflash.org/flashlearn/flas...-pamyatyu.html
Еще кое-что в том же духе.

mikhailk, спасибо за ссылку. Помогла

Цитата:

Сообщение от mikhailk (Сообщение 966927)
Но, честно говоря, все это от лукавого. На мощных компьютерах это будет незаметно, а на слабых не спасет.

У меня слабая машина. Исповедую следующий принцип: если идёт у меня, значит пойдёт где угодно.

А нагрузки бывают большими и на мощные машины…

mikhailk 23.01.2011 00:18

Цитата:

Исповедую следующий принцип: если идёт у меня, значит пойдёт где угодно.
не факт
у какого-нибудь пользователя будет открыто еще десять вкладок с пятью играми в браузере и все равно будет дергаться

Hauts 23.01.2011 00:25

semenyakinVS, расскажите про физический движок?

CCD используете?

Psycho Tiger 23.01.2011 00:40

Цитата:

А возможность кое-что сделать есть... По ссылке.
Просмотрел.
И что же возможно сделать с памятью?

semenyakinVS 23.01.2011 00:55

Цитата:

Сообщение от Hauts (Сообщение 966936)
semenyakinVS, расскажите про физический движок?

CCD используете?

Что это такое, CCD? Я пока пишу логику.

Добавлено через 1 минуту
Цитата:

Сообщение от Psycho Tiger (Сообщение 966942)
Просмотрел.
И что же возможно сделать с памятью?

Работать без коллектора. Не вызывать уничтожения данных, кэшируя их.

Psycho Tiger 23.01.2011 01:34

Цитата:

Работать без коллектора. Не вызывать уничтожения данных, кэшируя их.
И наблюдать как планка памяти растёт вверх?
Нет, спасибо.

Котяра 23.01.2011 01:51

Кстати зря вы так. Я сам реализовывал свой GC для кэширования битмапов. У меня хранился счётчик "пользователей" битмапа, если был не нужен - убивал (dispose).
Но дефактовый коллектор я никак не трогал... пусть живёт себе.

Psycho Tiger 23.01.2011 01:57

Цитата:

Кстати зря вы так. Я сам реализовывал свой GC для кэширования битмапов. У меня хранился счётчик "пользователей" битмапа, если был не нужен - убивал (dispose).
Это совсем другое.

semenyakinVS 23.01.2011 03:03

Цитата:

Сообщение от Psycho Tiger (Сообщение 966954)
И наблюдать как планка памяти растёт вверх?
Нет, спасибо.

Я имел в виду вызывать уничтожение объекта с умом и поменьше пользоваться конструкторами.

Добавлено через 5 минут
Цитата:

Сообщение от Котяра (Сообщение 966967)
Кстати зря вы так. Я сам реализовывал свой GC для кэширования битмапов. У меня хранился счётчик "пользователей" битмапа, если был не нужен - убивал (dispose).
Но дефактовый коллектор я никак не трогал... пусть живёт себе.

О!.. Что-то вроде такого я и имел в виду. Надстраивать стандартный GC своим.

Dispose это функция GC?

alatar 23.01.2011 11:22

Цитата:

Dispose это функция GC?
dispose это метод BitmapData.

Управлять gc можно только в дебаг-версии.

Кстати, по-поводу приблуды MemoryController. Она использует старый хак с LocalConnection. Нет никакой уверенности, что его не пофиксят в очередной версии плеера. Так что, ненадежно все это и не нужно, по-большому счету. Есть и более цивилизованные методы оптимизации.

Если так хочется дергать gc, то лучше воспользуйтесь этим.

mikhailk 23.01.2011 11:28

Цитата:

dispose это метод BitmapData
кстати, по моим наблюдениям, бесхозные битмапдаты могут стать нехилой утечкой памяти, так что их действительно иногда чистить не помешает.

Navznich 04.03.2011 16:47

А есть ли возможность чистить память "по команде"? Чтоб было привязано к какому-то событию.

Psycho Tiger 04.03.2011 19:48

А зачем?

in4core 04.03.2011 20:43

System.gc()

easy.proger 04.03.2011 20:49

Цитата:

Сообщение от in4core (Сообщение 978099)
System.gc()

+ объяснение каждому пользователю как установить дебаг плеер

cleptoman 04.03.2011 20:51

in4core как всегда все разрулил )

easy.proger 04.03.2011 20:59

Для расчетов можно сделать свой GC на основе битмапдат

Создаем битмапдату заполняем ее своими числами ( битмапдата это просто двухмерный массив где каждая его ячейка может принимать числа от 0 до 4 294 967 295 (uintMAX) если расчеты имеют знак числа ( типа отрицательное/положительное ) или числа с запятой, можно сохранить и вынуть знак и флоат значение через битовые операции ) после того как данные не нужны вызываем dispose()

UPD изменил сообщение так как сам проверил, битовые операции в флеше шикарно позволяют сохранить как флоат так и его знак...

Psycho Tiger 04.03.2011 21:01

Вот засорение памяти из за простых типов меня как то совсем не волнует)

alatar 04.03.2011 22:41

Цитата:

Сообщение от in4core (Сообщение 978099)
System.gc()

Работает только в дебаг-плеере.

Котяра 04.03.2011 23:16

Сиплюсплюса на вас нет)
Научились бы как убирать за собой!
Разве сложно сделать свой метод destroy который будет подчищать?

in4core 05.03.2011 00:54

@Котяра Не вижу проблем, помоему большенство уже делает destroy() метод, причем с таким же названием ))) Но автор видимо именно ГЦ ждет, самому не охота чистить

Котяра 05.03.2011 02:16

Цитата:

Сообщение от mikhailk (Сообщение 967038)
кстати, по моим наблюдениям, бесхозные битмапдаты могут стать нехилой утечкой памяти, так что их действительно иногда чистить не помешает.

Это для игры а ля королевство и т.п. становится основным фактором.
upd предвижу очень большие траблы с утечкой графической памяти с этим пресловутым молехиллом..
Я уже добился краша графсистемы )) но я просто тестил - реально никто в эту нору лезть глубоко не будет, кроме разработчиков дижков.

mikhailk 05.03.2011 11:47

Цитата:

Это для игры а ля королевство и т.п. становится основным фактором
Не только.
Например, автомобильные гонки на базе какого-нибудь 3D-движка вроде Альтернативы.
Там при построении карты для одной трассы суммарный объем используемых битмапдат может быть и 200Мб и больше. Если перед заездом на новой трассе не прибивать полностью старую, плеер легко забирает под себя всю память, до которой дотянется. :)

Psycho Tiger 05.03.2011 11:50

Цитата:

Но автор видимо именно ГЦ ждет, самому не охота чистить
Ну придёт ГЦ. Посмотрит на кучу ссылок на объекты, которые повисли в памяти (хотя программист хотел их удалить), скажет чтоб мы шли в пень.


Часовой пояс GMT +4, время: 02:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.