Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2010, 20:47
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 21  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Т.е. в данном случае, что Dictionary, что Object - один хрен?
Dictionary - объектный хэш, т.е. можно пихать туда объекты.
"1" "1" - по идее, это 2 разных объекта. Но почему то он ведёт себя как один в контексте Dictionary мне неясно.
UPD: хотя, я, кстати, погорячился причем сильно. "1"==="1", а очевидно что если взять значение от одного ключа два раза - оно совпадёт. Так что всё вполне понятно.

Например, здесь:
http://ru.wikipedia.org/wiki/%D0%A5%...B8%D1%86%D0%B0
Цитата:
Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение i = hash(key) играет роль индекса в массиве H.


Последний раз редактировалось Psycho Tiger; 10.11.2010 в 20:50.
Старый 10.11.2010, 21:44
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 22  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
-De-, Вы знаете как массивы хранятся в флеш плеере? Я не знаю. Догадки тут неуместны - если говорить о лоу-левеле за ширмой abc кода, то и говорить о нём. Короче, программиста не должны волновать низкоуровневые особенности кода, в который он транслируется.
Вам пофик, жрёт ваш массив гиг оперативки или килобайт? =)

Мап (map) в данном случае переводится как "ассоциативный массив", ну или отображение. Хэш (hash table, hash map) - один из алгоритмов его реализации.

Как работают слабые ссылки у Dictionary можно понять самому, написав примерчик, типа этого (правда только для дебаг плеера работает, для обычного чуть сложнее будет).
Код AS3:
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);
		}
	}
}
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 10.11.2010, 22:00
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 23  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
О боже. Простой тип может существовать только в связке со сложным (ну или статикой, но класс тоже можно считать сложным типом), причем он не может никуда ссылаться. Он просто есть в данном месте. И если это данное место удалить - то удалится и простой тип.

Цитата:
Вам пофик, жрёт ваш массив гиг оперативки или килобайт? =)
Приведите цифры сколько что ест памяти при какой загрузке.
Конкретно у меня когда нужен объектный хэш - используется диктионари, когда строковой - обджект, чего и Вам желаю. Поэтому кто сколько "жрёт" меня не волнует - я использую инструмент там, где надо. А разницу в памяти между Obect и Dictionary юзер и не заметит - на утечках фп улетит куда больше.

Старый 10.11.2010, 22:02
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 24  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
-De-, спасибо за пример, наглядно и доступно.
Цитата:
Например, здесь:
http://ru.wikipedia.org/wiki/%D0%A5%...B8%D1%86%D0%B0
Таким образом может получится, что массив/вектор в итоге дешевле выйдет?
Самому сейчас нет желания тест скорости писать, может у кого есть ссылка по теме? Помню как-то видел, только не помню где.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 10.11.2010, 22:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 25  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Код AS3:
			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
+4 байта на ссылку под ключ, +4 байта на ссылку под значение с каждым добавлением и там и там.
Поздравляю, Вы спасли 8 байт.
UPD: хотя, не 8, может чуть больше, возможно эти 8 байт - 2 ссылки, которые getSize считает по 4 байта. Но я думаю мысль ясна.

Добавлено через 44 секунды
Цитата:
Таким образом может получится, что массив/вектор в итоге дешевле выйдет?
Вектор/массив будет всегда быстрее хеша. Особенно если заполнение будет постепенным с 0.


Последний раз редактировалось Psycho Tiger; 10.11.2010 в 22:08.
Старый 10.11.2010, 22:37
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 26  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Конкретно у меня когда нужен объектный хэш - используется диктионари, когда строковой - обджект, чего и Вам желаю.
А когда нужен числовой?
Я про то, что такие "низкоуровневые особенности кода" могут таки делать хорошую разницу =)
Если Array - ассоциативный массив на самом деле, то для того, чтобы поиметь элемент с индексом в 1000000000 ему таки меньше памяти понадобится, чем если он обычный массив. =)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 10.11.2010, 22:43
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 27  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Теоретики, блин хоть кто-то из вас тест по ссылке смотрел?
60мс на 1000000 итераций это для вас хорошая разница?

Старый 10.11.2010, 22:54
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 28  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Сообщение от alatar Посмотреть сообщение
Теоретики, блин хоть кто-то из вас тест по ссылке смотрел?
60мс на 1000000 итераций это для вас хорошая разница?
А мы про память
Цитата:
А когда нужен числовой?
Array/Vector
Цитата:
Если Array - ассоциативный массив на самом деле, то для того, чтобы поиметь элемент с индексом в 1000000000 ему таки меньше памяти понадобится, чем если он обычный массив. =)
Код AS3:
var a:Array = [];
trace(getSize(a)); //40
a[1000000] = 1;
trace(getSize(a)); //48
И что это меняет? Для меня - ничего, я не работаю с памятью напрямую.
Код AS3:
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);
Код:
2020
548
А вот это заставляет считать меня Array чуть менее ассоциативным.

И бить по пальцам тех, кто забивает в массивы значения не с 0. Во всяком случае тех, кто специально.


Последний раз редактировалось Psycho Tiger; 10.11.2010 в 22:59.
Старый 10.11.2010, 23:47
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 29  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Psycho Tiger, попробуй так:
Код AS3:
for (i = 10000000; i > 0; i--)
вместо while - результат будет отличаться, но уже не так значительно
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 10.11.2010, 23:53
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 30  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
И правда, забавно, спасибо. Видимо, это издержки, что > 0 работает быстрее, чем насильно конвертировать в Boolean. Однако, суть теста не меняется )

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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