Про память, занимаемую Object и Array и что такое Array
Запись от -De- размещена 28.08.2011 в 18:39
В документации сказано, что для ассоциативных массивов (ну т.е. Object, например) используются хэш-таблицы. Но хэш-таблица - занимает память сама по себе и менять её размер бывает не весело. i.o. сказал, дескать вот те исходники тамарина, кури.
Выяснилось, что таки хэш-таблица, динамическая (размер меняется). Когда заполняется, то меняет размер, становится 2 * N + 1 (если старая N). Т.е. размер растёт скачками раза в два:
import flash.sampler.getSize; ... var obj:Object = new Object(); trace(getSize(obj)); for (i = 0; i < 100; ++i) { obj[i] = i; trace(getSize(obj)); }
import flash.sampler.getSize; ... var obj:Array = new Array(); trace(getSize(obj)); for (i = 0; i < 100; ++i) { obj[i+1] = i; trace(i,getSize(obj)); } obj[0] = 0; trace(i,getSize(obj)); // последние две строки вывода //99 1064 - тут массив не плотный //100 488 - теперь стал плотным
Лишний индекс может увеличить пожираемую память вашего обьекта в два раза и вставиться не так быстро, как остальные (хотя обычно это ничего не решает).
Всего комментариев 22
Комментарии
![]() ![]() |
|
Ты все-таки разобрался? Круто.
Вот глупый вопрос по хэшам. Если я не добавляю, а убиваю элемент (delete для динамических свойств как раз), память уменьшается в два раза? |
![]() ![]() |
|
Не уменьшается. Хм, наверно оставили это дело для GC.
|
![]() ![]() |
|
thank's. Очень полезно.
|
![]() ![]() |
|
gloomyBrain, с одной стороны это хорошо: GC — штука ресурсоемкая, меньше обязанностей для него будет на руку. Но, черт, к памяти стали относиться как к безграничной области. На мелких флешках этого не видно, но в крупных проектах? Вроде как в FP11 планируют допилить GC, интересно, какие нововведения в него добавят.
Сразу вспоминается цитата с баша. |
![]() ![]() |
|
Да. Всё равно там считай ссылки хранятся всегда, а на что там ссылки - не важно.
|
![]() ![]() |
|
Ага, спасибо, я так и подумал, но уже когда "разместить" нажал
![]() |
![]() ![]() |
|
КорДум, mooncar - Array и Object не типизированы, так что они просто содержат наборы указателей (что, кстати, позволяет им занимать мало места в памяти).
|
![]() ![]() |
|
Логично. Ага.
|
![]() ![]() |
|
-De-, спасибо за статью.
in4core, понимание подобных проблем приходит с возрастом/опытом. (эта реплика не нуждается в коментариях) |
![]() ![]() |
|
Цитата:
in4core, понимание подобных проблем приходит с возрастом/опытом
|
![]() ![]() |
|
Цитата:
Угу когда работаешь уже на ФСБ)))
|
![]() ![]() |
|
alatar, честно говоря, все проблемы флеша - это отрисовка. По крайней мере у меня iPad выдает 60 fps при оптимизации отрисовки, без изменения кода логики приложения.
|
![]() ![]() |
|
gloomyBrain, по-моему просто на фоне отрисовки других проблем не заметно %)
Например, тесты числодробилки/хэша. Писал новичок в as3, но как я ни старался, его C# обгонял в 10 или больше раз мой as3: http://sotnyk.com/2010/08/07/flex-1-...voditelnost/2/ |
![]() ![]() |
|
Цитата:
Когда делаешь приложение для телевизора, или для телефона.
|
![]() ![]() |
|
-De-, а говорил смотреть не будешь...
![]() Спасибо за расследование, весьма полезное. Цитата:
Не понимаю честно говоря зачем люди рассматривают все эти случаи в жизни и на практике. Одно дело рассмотр интер_фрейма, таймеров и т.д. Но массивы и объекты - которые даже супер слабый компьютер не нагнут как не пиши, не пофиг ли? Зарядка минимальная настолько что блевать хочется.... о чем вообще канитель о том, что лучше писать так, а не эдак? Ну лучше окей, толку то в данный момент лишь в красивости - производительность сnрадает на 0.01% - прекрасно.
|
|
Обновил(-а) i.o. 01.09.2011 в 00:11
|
![]() ![]() |
|
странно что не попали на эту статью http://jpauclair.net/2009/12/02/tama...t-i-as3-array/
|
Последние записи от -De-
- Про память, занимаемую Object и Array и что такое Array (28.08.2011)
- Isometric sorting (23.05.2011)
- разбиралка мат. выражений (28.12.2010)
- как передать параметр в слушатель (14.09.2010)