Подтвердить что ты не робот

Какая максимальная сумма памяти Adobe AIR может использовать?

Я делал несколько быстрых прототипов для игры, которую я собираюсь построить. одна из основных вещей, которые я хочу сделать, это создание карты для карты типа плитки. При создании карты я заканчиваю использование большого количества барана. Я строю карту как массив случайных целых чисел для моего теста. Когда я пытаюсь создать карты крупномасштабной вспышки, я получаю ошибку из памяти:

Error: Error #1000: The system is out of memory.

Я уже понял, что могу написать в файл вместо этого, чтобы решить эту проблему. но кто-нибудь знает фактический максимальный размер? Я пробовал поиск безрезультатно.

Мониторинг активности сообщает, что ADL использует около 500 МБ "реальной памяти" и около 700 МБ "виртуальной памяти". Свойство System.privateMemory, похоже, соответствует значению "реальной памяти".

как побочная заметка, которую я разрабатываю в OSX Snow Leopard (64) с 8-гигабайтным ram

EDIT:

Здесь пример test я am running

var ba:ByteArray = new ByteArray();
for(var i:uint = 0; i<100000000; i++)
{
    ba.writeInt(int(Math.random()*100));
}

trace("end", ba.length, System.totalMemory);

В этом примере выполняется нормально, после чего общее свойство памяти сообщает о 500 МБ используемой памяти. Теперь, увеличивая целевое значение до 400 000 000, я в конечном итоге получаю ошибку "из памяти".

Примечание. Тестирование во Flash CS5.5 с таймаутом, установленным на 120 секунд (тест не достигает этого времени)

EDIT:

Я создал лучший пример для тестирования:

var i:uint = 0;
var loopLength:Number = 500000000; // 500,000,000
var ba:ByteArray = new ByteArray();

for(i=0;i<loopLength;i++){
    try{ba.writeInt(1);}
    catch(e:Error){
        MEM_TI.appendText(e.message);
        break;
    }
}    

ba.position = 0;
MEM_TI.appendText("\nTM: "+System.totalMemory+" FM: "+System.freeMemory+" PM: "+System.privateMemory+" BALENGTH: "+ba.bytesAvailable/4);

Когда я запускаю этот script из браузера, автономный отладчик или AIR я получают примерно одинаковые показания использования памяти (которые, как я знаю, все равно меняются). Тем не менее, постоянная длина конечной длины массива байтов:

Браузер (Firefox): TM: 540413952 FM: 19116032 PM: 562573312 BALENGTH: 134217728

Автономный: TM: 540577792 FM: 1810432 PM: 545361920 BALENGTH: 134217728

AIR (2.6): TM: 5410816 FM: 1159168 PM: 551464960 BALENGTH: 134217728

Мои методы тестирования могут быть не идеальными, хотя я не знаю, как сделать более глубокое профилирование.

4b9b3361

Ответ 1

Как и для Windows 7 и AIR 3.3 Приложения Adobe AIR ограничены объемом памяти 1 ГБ. Это изменится после того, как Adobe AIR станет 64-битным. Adobe планирует сделать 2 разных перезаписи платформы. Первый передел будет выполнен к концу 2012 года. Этот переписывающий файл добавит многопоточность во время выполнения Flash, AIR. Вероятно, это первое исправление не устранит существующие проблемы с распределением памяти и ограничения. Но второе переписывание наверняка будет в 2013 году под кодовым названием "Далее". Это переписывание - это "ActionScript 4.0", который включает в себя 64-битную среду выполнения, улучшения распределения памяти, улучшения языка программирования, новый компилятор и значительное улучшение производительности. До тех пор не пытайтесь выделять более 900 МБ ОЗУ, рискуя простым провалом приложения без предупреждения.

Ответ 2

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

Если вы разместите более подробную информацию (возможно, в другом вопросе), возможно, мы сможем быть более полезными.

Ответ 3

Не уверен, что вы уже на нем, но можете играть со свойством System.totalMemory, чтобы получить живое считывание объема памяти, который использует вспышка в данный момент (все экземпляры Flash Player/adl, поэтому если у вас открыт браузер с воспроизведением флэш-контента)

Ссылка: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/System.html#totalMemory

Это может помочь отобразить память, используемую в текстовом поле на экране, или добавить ее в список просмотра, когда вы отлаживаете, чтобы узнать, какие именно классы/методы съедают все, что происходит! Вы также можете взять показания totalMemory и поставить точки останова, чтобы остановить программу, когда она достигает определенного порога.

Это может также помочь создать только карту, достаточно большую для того, что находится на экране, и создать дополнительную территорию, когда игрок движется в определенном направлении и отбраковывает территорию, которая выходит за пределы. Эта форма отбраковки популярна в 3D-играх, чтобы устранить невидимую геометрию, но также поможет решить вашу проблему с массивными картами и ограниченной памятью.

Ответ 4

Недавно я исследовал эту проблему и действительно кажется, что существует порог памяти (в зависимости от платформы и, кажется, особенно в ОС), после чего приложение AIR перестанет отвечать на запросы/сбой. (Мне не удалось получить ошибку памяти за пределами памяти # 1000, хотя). Я открыл здесь ошибку Adobe: https://tracker.adobe.com/#/view/AIR-4198476. Надеемся, что мы скоро получим дополнительную информацию от Adobe.