Какой максимальный объем памяти может использовать Adobe AIR? - PullRequest
12 голосов
/ 01 июля 2011

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

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

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

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

В качестве примечания я разрабатываю в OSX Snow Leopard (64) с оперативной памятью 8 ГБ

EDIT:

Вот пример теста, который я запускаю

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);

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

Браузер (Firefox): TM: 540413952 FM: 19116032 PM: 562573312 ЗНАЧЕНИЕ: 134217728

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

ВОЗДУХ (2.6): TM: 5410816 FM: 1159168 PM: 551464960 ДЛИНА: 134217728

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

Ответы [ 4 ]

2 голосов
/ 24 мая 2012

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

0 голосов
/ 04 октября 2017

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

0 голосов
/ 06 июля 2011

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

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

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

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

0 голосов
/ 04 июля 2011

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

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

...