|
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
"1" "1" - по идее, это 2 разных объекта. Но почему то он ведёт себя как один в контексте Dictionary мне неясно. UPD: хотя, я, кстати, погорячился причем сильно. "1"==="1", а очевидно что если взять значение от одного ключа два раза - оно совпадёт. Так что всё вполне понятно. Например, здесь: http://ru.wikipedia.org/wiki/%D0%A5%...B8%D1%86%D0%B0 Цитата:
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 10.11.2010 в 20:50. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Цитата:
Мап (map) в данном случае переводится как "ассоциативный массив", ну или отображение. Хэш (hash table, hash map) - один из алгоритмов его реализации. Как работают слабые ссылки у Dictionary можно понять самому, написав примерчик, типа этого (правда только для дебаг плеера работает, для обычного чуть сложнее будет). package { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.system.*; public class Main extends Sprite { public var dict:Dictionary = new Dictionary(true); public function Main() { var s:String = "test"; var spr:Sprite = new Sprite(); var val:Sprite = new Sprite(); //addChild(val);//попробуйте пооткомментировать и посмотреть //addChild(spr); dict[s] = 1; dict[spr] = val; System.gc(); addEventListener(Event.ENTER_FRAME, ef); } public function ef(ev:Event):void { for (var key:Object in dict) trace(key, dict[key]); removeEventListener(Event.ENTER_FRAME, ef); } } }
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
О боже. Простой тип может существовать только в связке со сложным (ну или статикой, но класс тоже можно считать сложным типом), причем он не может никуда ссылаться. Он просто есть в данном месте. И если это данное место удалить - то удалится и простой тип.
Цитата:
Конкретно у меня когда нужен объектный хэш - используется диктионари, когда строковой - обджект, чего и Вам желаю. Поэтому кто сколько "жрёт" меня не волнует - я использую инструмент там, где надо. А разницу в памяти между Obect и Dictionary юзер и не заметит - на утечках фп улетит куда больше.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
-De-, спасибо за пример, наглядно и доступно.
Цитата:
Самому сейчас нет желания тест скорости писать, может у кого есть ссылка по теме? Помню как-то видел, только не помню где.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
var o:Object = { }; var d:Dictionary = new Dictionary(); trace(getSize(o)); //24 trace(getSize(d)); //32 var s:String = "1"; var v:String = "v"; o[s] = v; d[s] = v; trace(getSize(o)); //32 trace(getSize(d)); //40 Поздравляю, Вы спасли 8 байт. UPD: хотя, не 8, может чуть больше, возможно эти 8 байт - 2 ссылки, которые getSize считает по 4 байта. Но я думаю мысль ясна. Добавлено через 44 секунды Цитата:
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 10.11.2010 в 22:08. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Цитата:
Я про то, что такие "низкоуровневые особенности кода" могут таки делать хорошую разницу =) Если Array - ассоциативный массив на самом деле, то для того, чтобы поиметь элемент с индексом в 1000000000 ему таки меньше памяти понадобится, чем если он обычный массив. =)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Цитата:
Цитата:
var i:int = 10000000; var a:Array = []; var t:int = getTimer(); while (i--) a[i] = 1; trace(getTimer() - t); a = []; t = getTimer(); for (i = 0; i < 10000000; i++) a[i] = 1; trace(getTimer() - t); И бить по пальцам тех, кто забивает в массивы значения не с 0. Во всяком случае тех, кто специально.
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 10.11.2010 в 22:59. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
И правда, забавно, спасибо. Видимо, это издержки, что > 0 работает быстрее, чем насильно конвертировать в Boolean. Однако, суть теста не меняется )
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 05:06. |
|
« Предыдущая тема | Следующая тема » |
|
|