我一直在为我想要制作的游戏进行快速原型设计。其中一个主要任务是生成一个瓷砖类型地图。在生成地图时,我最终会使用大量的RAM。我正在为我的测试构建一个随机整数数组作为地图。当我尝试生成大规模的地图时,Flash会提示内存不足错误:
Error: Error #1000: The system is out of memory.
我已经想到可以将内容写入文件来解决这个问题。但是有没有人知道实际的最大大小?我已经尝试搜索,但没有结果。
活动监视器报告ADL正在使用约500MB的“实际内存”和约700MB的“虚拟内存”。System.privateMemory属性似乎与“实际内存”值匹配。
另外一件事,我正在使用8GB RAM的OSX Snow Leopard(64位)进行开发。
编辑:
这是我正在运行的示例测试。
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);
这个例子运行良好,之后总内存属性报告使用了约500MB的内存。 现在将目标值增加到400,000,000,最终收到“内存不足”错误。
注意:在Flash CS5.5中进行测试,超时时间设置为120秒(测试从未达到该时间)
编辑:
我已创建一个更好的测试例子:
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 BALENGTH: 134217728
独立调试器:TM: 540577792 FM: 1810432 PM: 545361920 BALENGTH: 134217728
AIR(2.6):TM: 5410816 FM: 1159168 PM: 551464960 BALENGTH: 134217728
我的测试方法可能不完美,但我不知道如何进行更深层次的分析。