Pull to refresh

Быстрый доступ к 2D-массиву во флэше

Reading time 1 min
Views 1.2K
Задача простая и типичная. Есть большой двумерный массив. И нам хочется наиболее эффективно с ним работать. В моем случае, меня интересовал массив чисел (байт).

Что ж… Самое простое, что приходит на ум — это воспользоваться стандартным двумерным массивом типа и обращаться к элементам на манер a[x][y]. Но насколько это эффективно? Возможно, будет быстрее оперировать с одномерным массивом и обращаться к элементам как a[x + y*size_x]?

Чтобы расставить все точки над i, я написал тест, который проверяет скорость чтения и записи различных вариантов массивов.

На ум пришли следующие варианты:
  • 2-мерный нетипизированный массив (Array)
  • 1-мерный нетипизированный массив (Array)
  • 2-мерный типизированный массив (Vector.<Vector.<int>>)
  • 1-мерный типизированный массив (Vector.<int>)
  • Использование BitmapData как хранилища и setPixel/getPixel для доступа
  • 1-мерный массив байт (ByteArray)
  • Ну, и наконец, изврат. Обращение к ByteArray, ускоренное средствами быстрого доступа к памяти технологии Alchemy

Итак, я написал небольшой тест для сравнения скорости выполнения кода. В тесте производилась имитация чтения и записи всех элементов массива 1500х1500 точек. Каждая операция выполнялась 5 раз и бралось среднее время.

Также, естественно, динамические массивы были заранее созданы и наполнены элементами (т.е. новые элементы не добавлялись во время тестовых замеров).

Итак, что получилось:



Диаграмма:



Выводы очевидны.

Исходный код выложил сюда: wonderfl.net/c/d58d
Tags:
Hubs:
+16
Comments 47
Comments Comments 47

Articles