Есть ли преимущество в использовании Vector. <Object>вместо стандартного массива? - PullRequest
3 голосов
/ 18 января 2012

Из-за невозможности динамического создания Векторов я вынужден создать объект с очень примитивным типом, то есть Object:

var list:Vector.<Object> = new Vector.<Object>();

Я предполагаю, что Вектор получает свою силу от того, что его набрали каккак можно точнее, а не выше, но я могу ошибаться, и на самом деле есть все еще выгоды при использовании вышеупомянутого вместо обычного массива или объекта:

var list:Array = [];
var list:Object = {};

Есть ли у кого-нибудь пониманиеэто?

Ответы [ 3 ]

6 голосов
/ 18 января 2012

Вы не получите никаких преимуществ от Vector. по сравнению с Array или наоборот.Кроме того, базовая структура данных будет такой же, даже если у вас есть более тесно связанный вектор, такой как Vector. .Единственный выигрыш в оптимизации будет, если вы используете типы значений.Причина этого заключается в том, что Ecmascript все еще будет иметь позднюю привязку, и все ссылочные объекты будут использовать одну и ту же структуру ссылочных байтов.

Однако в Ecmascript 4 (реализация ActionScript) универсальный тип данных Vector добавляет проверку границ длядоступ к элементам (не-вектор будет просто увеличивать массив), поэтому функциональность немного меняется, и, следовательно, количество тактов ЦП будет немного отличаться.Это незначительно, однако.

2 голосов
/ 18 января 2012

Одно преимущество, которое я видел, состоит в том, что с векторами кодирование немного проще, потому что FlashDevelop (и большинство инструментов кодирования для as3) может лучше подсказывать код. так что я могу сделать myVector. и посмотреть мои методы и функции, массив не позволит вам сделать это без приведения myArr[2] as myObject (хотя, по слухам, этот тип приведения делает его быстрее, а не медленнее)

Однако функции сортировки массива работают быстрее, но если вам нужна скорость, вам могут быть полезнее связанные списки (ожидающие приложения)

Я думаю, что использование векторов является правильным способом кодирования, но не обязательно лучше.

0 голосов
/ 18 января 2012

Отличный вопрос - Векторы имеют огромное значение! Вектор. vs Array - плохой пример различий, хотя тесты могут быть похожими. Однако Вектор. vs Array ОПРЕДЕЛЕННО лучше и память, и обработка. Повышение скорости происходит из-за того, что Flash не нужно «вставлять» и «распаковывать» значения (для этого требуется несколько математических операций). Кроме того, массив не может распределять память так же эффективно, как типизированный вектор. Коллекции строгой типизации почти всегда лучше.

Тесты: http://jacksondunstan.com/articles/636 http://www.mikechambers.com/blog/2008/09/24/actioscript-3-vector-array-performance-comparison/

Даже .NET страдает от боксерских сборов (Массив): http://msdn.microsoft.com/en-us/library/ms173196.aspx

UPDATE :

I've been corrected! Only primitive numeric types get a performance enhancement 
from Vectors. You won't see any improvement with Array vs Vector.<Object>.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...