Производительность AS3 / Flex - новый ArrayList против ArrayList.removeAll () - PullRequest
3 голосов
/ 21 марта 2012

Что на самом деле быстрее?Просто создаете новый ArrayList / ArrayCollection или повторно используете существующий и удаляете его элементы?

Я разрабатываю для мобильных устройств, где производительность всегда является проблемой, поэтому я выбрал самый быстрый метод.

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

еще быстрее - mycollection.source = []; (в отличие от mycollection.source = new Array())

Другой вариант - использовать связанные списки и пулы объектов.Пулы объектов позволяют объектам переписывать свои свойства вместо удаления объекта и создания нового.Если вы затем сохраните их в связанном списке, а не в массиве, их циклическая обработка будет выполняться намного быстрее.Поэтому, если вы просто хотите пройтись по куче объектов, использовать связанные списки, но если вам нужно будет выполнить какую-либо сортировку, то массив и векторы будут быстрее.

Другая проблема - использование памяти.не только для того, чтобы приложения выполняли меньше памяти, но чем больше объектов вы объявляете, тем больше работы должен выполнять сборщик мусора, когда наступает время очистки.

5 голосов
/ 21 марта 2012

Вот интересный пост в блоге по оптимизации очистки ArrayList / ArrayCollection.Очевидно, установка mycollection.source = new Array() значительно быстрее, чем mycollection.removeAll() с большими наборами данных, так как removeAll гарантирует, что все прослушиватели событий будут удалены.

В этом случае, скорее всего, новый ArrayList превзойдет ArrayList.removeAll (), но новый исходный массив может быть лучшим вариантом, поскольку он должен меньше влиять на привязки / слушателей.

...