2012-03-01 2 views
8

Известно, что Flash работает очень непредсказуемым образом, когда дело касается манипулирования данными. Мне любопытно, что если есть какое-либо преимущество в производительности/памяти для использования Numbers вместо ints, помимо значений, которые требуют точности. Я слышал, что некоторые основные операции во Flash могут преобразовывать несколько раз между двумя типами для разрешения выражения. Я также слышал, что Flash runtime под капотом фактически отображает ints для неточности Numbers/Floats во время выполнения. Это правда?Являются ли ints всегда быстрее, чем Numbers/Floats в AS3?

ответ

14

Flash runtime - это темное место.

  • Как вы упомянули AVM2 does convert big ints into Number.
  • Целые числа действительны.
  • And there's more stuff about ints.
  • Uints использовалось для медленного использования в цикле BUT NOW THEY ARE NOT (результаты в этой статье кажутся комбинацией создания странных байткодов и оптимизации JIT).
  • Номера занимают больше места в памяти, но это nothing по сравнению с одним файлом JPEG.
  • Логично, что лучше использовать uints в цикле.
  • Номера - это фальшивые точки с плавающей запятой, вы должны быть осторожны, сравнивая их.

Jackson Dunstan делает довольно неплохие испытания различных конструкций конструкций языка AS3. Конечно, всегда хорошо проверять результаты самостоятельно. Из серии о производительности 10.2 вы можете видеть, что с каждой новой версией Flash Player они что-то оптимизируют, но другие вещи могут замедляться: 123.

P.S. Этот ответ может стать старым очень скоро и может быть также процитирован через пару лет спустя, что, конечно, будет неправильным.

0

Вы не получите real преимущество в производительности с int over Number. Поэтому, если вы не используете переменную для таких вещей, как индексы цикла или вещи, требующие точных приращений, Number is fine. Фактически, число может быть NaN, если вы получите неверный результат, что является хорошим преимуществом.

+0

Ну, вы * сделаете * получить преимущества памяти, хотя - int использует 32 бита, число использует 64 бита. – weltraumpirat

+0

Кроме того, из вашего собственного связанного источника это senoculars ответ: «' + -/*% '- все операции с числами. Если они используются в int/uint, они будут преобразованы в число Flash-плеером в фоновом режиме и После завершения операции вернитесь назад к int/uint. '| &^>><< > >>' (bitwize) сохраняет типы int/uint в проигрывателе и оптимизирован для них для этих типов. " – weltraumpirat

+0

weltraumpirat, вы должны использовать LOT переменных для двухбайтовой разницы между int и числом, чтобы быть проблемой, но вы, конечно, правы. :) – Almo