У меня возникли проблемы с управлением памятью во флэш-приложении. Использование памяти растет довольно много, и я отследил ее до того, как я загружаю активы.Использование памяти во Flash/Flex/AS3
я вставлять несколько растровых изображений в классе Embedded, как этот
[Embed(source="/home/gabriel/text_hard.jpg")]
public static var ASSET_text_hard_DOT_jpg : Class;
я экземпляр Активов, таким образом
var pClass : Class = Embedded[sResource] as Class;
return new pClass() as Bitmap;
На данный момент, использование памяти идет вверх, что является совершенно нормальным , Однако null
все ссылки на объект не освобождают память.
Основываясь на этом поведении, похоже, что флеш-плеер создает экземпляр класса при первом запросе, но никогда не выпускает его - не без ссылок, вызывая System.gc(), делая двойной трюк LocalConnection , или вызов dispose() в объектах BitmapData.
Конечно, это очень нежелательно - использование памяти будет расти до тех пор, пока все в SWF-файлах не будет установлено, независимо от того, давно ли я давно перестал использовать какой-то актив.
Является ли мой анализ правильным? Можно ли что-то сделать, чтобы исправить это?
Извините, я не совсем понимаю. Я описал только один способ сделать это. Первый фрагмент показывает, как я вставляю активы, а второй - как я их пример. Вы имеете в виду, почему я просто не делаю 'new ASSET_text_hard_DOT_jpg()'? Это потому, что мой код довольно сложный и не всегда знает заранее, что ему нужно, например, он создает строку из нескольких частей и получает изображение с именем (т.е. «text_» + s_lDifficulty [nDifficulty] -> «text_hard») – ggambett
I извините, но я думаю, что вещь, которую вы пытаетесь достичь, невозможна. Из того, что я знаю, ресурсы встроены, когда swf построен, я не уверен, что вы можете динамически встраивать ресурс, как вы описали. Что бы я сделал, чтобы создать словарь и поставить туда все необходимые мне ресурсы. Я бы использовал его, как в коде UPDATE1, который я написал сейчас в ответе. –