ActionScript 2 бокс производительности - PullRequest
1 голос
/ 17 января 2009

Я слышал, что AS вставляет и un-boxes значения каждый раз, когда аргументы передаются в / из функций.

A. Следовательно, это будет быстрее?

var val = doWork(50,"hello", 2048);

function doWork (param1,param2,param3){
   t.text = param2;
   return param1+param3;
}

Б. Или это?

var val:Number = doWork(50,"hello", 2048);

function doWork (param1:Number,param2:String,param3:Number):Number{
   t.text = param2;
   return param1+param3;
}

Ответы [ 2 ]

3 голосов
/ 17 января 2009

Нет никакой разницы во время выполнения. AS 2 запускается виртуальной машиной Actionscript 1 (AVM1), которая не поддерживает статическую типизацию, поэтому информация о типе - это скорее подсказка для компилятора, которая поможет вам раньше обнаружить несоответствия типов. Но один и тот же код с аннотациями типов или без них создает один и тот же байт-код.

AS 3 запускается AVM2, который поддерживает как динамическую, так и статическую типизацию, поэтому объявление типов в коде исключает некоторый поиск во время выполнения, что ускоряет его выполнение.

0 голосов
/ 17 января 2009

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

Существует не так много информации о том, как ActionScript выполняет упаковку и распаковку (по сравнению с подобными C # и Java), но документы AS3 действительно обращаются к ней немного (см. Типы данных):

http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_01.html

В целом, однако, лучше избегать проверки типов во время выполнения и использовать «примитивы» AS3, как определено в документации (Boolean, Number, int, uint, String). Удачи!

...