![]() |
|
||||||||||
|
|||||
|
Доброго времени суток всем!
Интересует, каким образом вы вычищаете, например хеш, чтобы повторно использовать: var hash:Object = {}; hash["a"] = 1; hash["b"] = 2; ???? // Здесь должна быть очистка хеша неизвестным способом // и можно использовать хеш по новой: hash["c"] = 3; ... Но огрёб один раз при использовании массива [] вместо объекта {} С объектом воспроизвести лажу не удалось. Для примера оин из вариантов с ассоциативным массивом: var key:String; var hash:Object = []; hash[1] = 1; hash[2] = 2; hash[0] = 3; for (key in hash) { delete hash[key]; } for (key in hash) { throw "hash mast be clean";// Падает } var key:String; var hash:Object = []; hash[-1] = 1; hash[2] = 2; hash[0] = 3; hash.length = 0; for (key in hash) { throw "hash mast be clean";// Падает } Кто-нибудь сталкивался с багами при такой очистке (в доках этот вопрос не освещён - не нашёл)? Последний раз редактировалось expl; 22.01.2011 в 19:15. |
|
|||||
|
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Время на создание объекта затрачивается болше, чем на удаление из него 2-3 элементов,
плюс добавляется работа GC по сносу старого объекта, который мог бы послужить ещё. Для сложных алгоритмов это может быть критично. Последний раз редактировалось expl; 22.01.2011 в 20:49. |
|
|||||
|
expl, это догадки или есть реальные тесты где видно, что это критично?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Сейчас попробовал.
Странно это все. Прироста с вычисткой объекта не наблюдается. var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); var time:int = getTimer(); var object:Object = { }; for (var i:int = 0; i < 10000; i++) { object["a"] = 10; object["b"] = 11; /* for (var key:String in object)// 19 - 21 ms { delete object[key]; } /*/ object = { };// 19 - 21 ms //*/ } tf.text = "time: " + (getTimer() - time) + " ms"; - разница в производительности неоднозначна, может даже создавать объекты быстрее - это радует. - косвенное падение производительности (из-за вычистки насозданных объектов GC) так просто не оценить. - и все-таки: у кого нибудь возникали баги с удалением ключей в цикле for in? - вопрос то в этом был. (Тут проблема может быть не только в производительности - а например передаем объект в функцию, чтобы она его поправила, так вот удастся ли в ней этот объект очистить - к примеру - на практике такого не возникало) Последний раз редактировалось expl; 22.01.2011 в 21:48. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Если не секрет, а зачем нужны эти пляски с бубнами?
Я про ассоциативные массивы в AS3. |
|
|||||
|
Вообще в моем случае можно было обойтись и объектом "{}", делал сначала на массиве, чтобы сэкономить на преобразовании из числа в строку, за что поплатился.
Воспроизвел багу с использованием обьекта - этот тест потерялся (повторно написать такой тест неудалось - может быть ошибка была в тесте, может кривая версия флешплеера попалась) Теперь удалось воспроизвести только баги с вычисткой массива. Теперь вот не знаю - можно ли доверять объектам. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|