[Logo]
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing  
[Register] Register / 
[Login] Login 
Вопросы производительности  XML
Forum Index » Flash
Author Message
Cobolin


Joined: 02/06/2008 21:50:10
Messages: 8
Offline

Привет всем форумчанам. Есть непонятки по производительности. Где то здесь на форуме (то ли в блоге альтернативы) да и на других ресурсах читал о том что скорость доступа к Object быстрее чем скорость доступа к элементам Array, то есть, если создать динамический список, то хоть создание происходит дольше зато потом скорость доступа к элементам намного выше чем к элементам Array. Захотел проверить насколько все-таки быстрее и написал не большой тест. Как реализацию динамического списка взял известную библиотеку для игровых структур данных AS3DS. Реализовал замер производительности, как создания так и доступ к элементам, для таких контейнеров как: DLinkedList – двух направленный динам. список, SLinkedList – односторонний динам. список, Array и Array с предустановленным количеством элементов (почему то подумал что этот вариант должен был бы быть быстрее чем Array с неизвестным к-вом элементов, но это оказалось не так ). Ну так вот оказалось все абсолютно не так как ожидалось:
создание Array происходит как минимум в два раза быстрее (от 2 до 6). Но это ладно, черт с ним;
извлечение (доступ) данных в Array в среднем на ПОРЯДОК!!! быстрее чем у динам. списка;
А вот это уже плохо. Объясните почему так. Может быть я что напутал. В аттаче готовая SWF и исходник, посмотрите кому не влом.

У меня получились такие результаты (в Internet Explorer):
Create and set DLinkedList
Time creation = 578 ms
Create SLinkedList
Time creation = 500 ms
Create and set Array
Time creation = 140 ms
Create and set FixedArray
Time creation = 141 ms
Extract DLinkedList
Extraction time = 157 ms
Extract SLinkedList
Time extaction = 156 ms
Extract Array
Extraction time = 15 ms
Extract FixedArray
Extraction time = 15 ms


P.S. В самой программе я думаю все интуитивно понятно (сначала тыкаем кнопочку создать требуемый контейнер с данными, а потом делаем ему extract. Можно задать количество засечиваемых объектов (по-умолчанию 100000), Reset Result обнуляет все контейнеры. Да и произведите несколько раз одну и туже операцию чтобы усреднить результаты, часто бывают завышены числа).

P.P.S. Кстати в Google Chrome результаты работы динам. списков намного быстрее, но тенденция таже - массивы быстрее.

 Filename TestAS3DS.as [Disk] Download
 Description source
 Filesize 12 Kbytes
 Downloaded:  239 time(s)

 Filename TestAS3DS.swf [Disk] Download
 Description swf
 Filesize 8 Kbytes
 Downloaded:  186 time(s)

makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1535
Offline

ну, для начала ты ко времени извлечения доплюсовал вызов .hasNext(), в то время как для массива заблаговременно сделал var len:int = array.length; хотя вообще такого разброса быть не должно. вопрос вообще интересный, все замеры на эту тему делались ой как давно.
[WWW]
makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1535
Offline

Вот мой тест, из под ИДЕ:

Wait...array access 35 ms
list access 17 ms

Из под ИЕ (10й релиз):

Wait...array access 21 ms
list access 18 ms

Из под Лисы (9й дебуг):

Wait...array access 30 ms
list access 23 ms
 Filename test.zip [Disk] Download
 Description
 Filesize 5 Kbytes
 Downloaded:  192 time(s)

[WWW]
Cobolin


Joined: 02/06/2008 21:50:10
Messages: 8
Offline

Видишь ли я как то не нашел как по индексу достучатся до элементов динамического списка (подозреваю что в этой реализации это невозможно), есть пропертя size которая указывает количество элементов в списке (и я надеюсь что это именно существующие элементы, а не просто "забронированое" пространство (ну типа как ведет себя ArrayList в Java)), а вот как по индексу вытянуть элемент помоему нет, потому приходится проверять через hasNext() (да и где то видел пример с подобной конструкцией).
Cobolin


Joined: 02/06/2008 21:50:10
Messages: 8
Offline

makc, да, если так посмотреть на дело то действительно скорость почти одинаковая, но надо заметить что твоя реализация динам. списка однонаправлена и мягко говоря идеальная
 
Forum Index » Flash
Go to:   
Powered by JForum 2.1.8 © JForum Team