我在flash中有内存使用问题,我成功卸载并删除已加载 SWF来自舞台,但我无法删除已加载的内存,而且fps也从30下降到18.
如何将SWF加载到内存中
我按照这样加载它们:
mLoader = new Loader();
var mRequest:URLRequest = new URLRequest(url);
mLoader.load(mRequest);
mLoader.x = pozX;
mLoader.y = pozY;
swfModules[url] = mLoader;
swfUrlArray.push(url);
currentLoaded = url;
addChild(mLoader);
在循环中删除SWF
for(var i=0; i < swfUrlArray.length; i++) {
if(swfModules[swfUrlArray[i]] != null) {
swfModules[swfUrlArray[i]].unloadAndStop();
removeChild(swfModules[swfUrlArray[i]]);
}
swfUrlArray=[];
}
我怀疑这里的循环太快而无法闪存以卸载SWF的内存 所有文件同时。 请对此问题提出任何建议或意见。
答案 0 :(得分:1)
清除swfUrlArray INSIDE你的for循环。所以它只会首先unloadAndStop,发现数组的长度为0并停止。
修改后的代码:
for(var i=0; i < swfUrlArray.length; i++) {
if(swfModules[swfUrlArray[i]] != null) {
swfModules[swfUrlArray[i]].unloadAndStop();
removeChild(swfModules[swfUrlArray[i]]);
}
}
swfUrlArray=[];
并执行@alxx关于从字典中删除swf引用的内容。
答案 1 :(得分:0)
swfModules是一个字典吗?似乎它仍然是加载swf的参考。使用delete swfModules[url]
从词典中删除项目。