Ну, это вроде загруженный вопрос.Независимо от того, что вы делаете, если вы добавите код, вы будете использовать память.Теперь «съесть память» относится к тому, что вы делаете, и я хотел бы видеть больше информации о распределении памяти для каждого варианта использования.
Что касается того, почему один использует больше памяти, чем другой,довольно просто (я думаю).Это связано с тем, как Flash управляет объектами.По умолчанию Flash использует базовые переменные-ссылки, однако примитивы не учитываются и дублируются.Например:
var a:Object = {};
var b:Object = a;
// then a === b as in the same reference in memory (check it in debugger)
// However
var a:String = 'weee';
var b:String = a;
// Then a !== b since the String is duplicated in memory
Причина этого в том, что они хотели сохранить ActionScript достаточно простым и не заставлять разработчиков беспокоиться о ссылках на память (например, использовать '&' перед переменными в Cили Java для переменной).Но, как вы указали, предостережение об этом - дублирование примитивов.По большому счету, он очень минимален по сравнению со всем остальным, что создается, плюс я вполне уверен, что вы будете использовать модели и тому подобное для хранения ваших данных, как вы должны;)
Что касается 'встроенные магические числа, я считаю, что причина, по которой это занимает место, заключается в том, что теперь он хранит строковую версию этого значения и «настоящую» версию (поскольку mxml выполняет приведение за вас).Что касается констант, я не совсем уверен, почему это использует больше памяти;Я предположил бы, что это будет точно так же, как переменные, так как они дублируют обе, но я мог бы быть, потому что это должно «заблокировать» эту переменную, чтобы никто не мог ее изменить.
Я бы порекомендовал вам попробовать сделать тот же тест, но с объектами и моделями, чтобы увидеть, что вы обнаружите.Я мог бы предположить, что универсальный объект будет использовать больше памяти, чем класс, но было бы неплохо увидеть, что вы найдете:чисто AS, они должны работать точно так же (за исключением одного «магического числа»).Связывание добавляет дополнительную память, конечно, но это компромисс;меньше памяти или утилита привязки.Я также хотел бы предложить вам сделать то же самое в чистом ActionScript и сравнить его с его аналогом mxml (используя BindingUtils для связывания в AS) и показать эти результаты.