我目前在My Project中使用了arthur-debert的BulkLoader,因为我需要加载一个SWF列表并在屏幕上显示它们。 但是,一旦我尝试处理BulkLoader实例并重新加载另一个列表,就会出现问题:缓存了大量内存。
为了研究处理这些资源的正确方法,我做了一些研究。 我试过了loader.removeAll(),loader.clear(),loader.getContent(“XXX”,true)和Bulkloader.removeAllLoader() 但他们都无法提供帮助。
这是我的测试代码:
public static var file:XML; *// this will store s list of path of different SWF*
private var loader:BulkLoader = new BulkLoader();
private var count:int = 0;
private var NumberOfTest:int = 20;
private function Test3():void
{
for (var i:int = 0; i < file.item.length(); i++)
{
loader.add("ui/" + String(file.item[i].@url));
}
loader.addEventListener(BulkProgressEvent.COMPLETE, OnComplete, false, 0, true);
loader.start();
}
private function OnComplete(e:BulkProgressEvent):void
{
loader.removeEventListener(BulkProgressEvent.COMPLETE, OnComplete, false);
loader.clear();
loader = new BulkLoader();
System.gc();
if (count < NumberOfTest)
{
trace("Finish Count : " + count);
count++;
Test3();
}
else
{
trace("Finish All Test");
}
}
在上述测试之后,我认为内存使用量应该返回到测试前的水平。 但结果与我的期望不同。 这是我的结果:
Before the test:
Current Total Memory: 101,471 KB
Used Memory: 98,524
ActionScript Objects: 25,425
Bitmap DisplayObjects: 32,988
Bitmap Filter Buffer: 58
CacheAsBitmap Buffers: 39
Main Screen Buffer: 2,344
Other Bitmap Memory: 90
ByteArrays: 0
SWF Files: 21,028
Network Buffers: 128
Uncategorized: 16,424
After the test:
Current Total Memory: 378,559 KB
Used Memory: 344,978
ActionScript Objects: 121,171
Bitmap DisplayObjects: 32,988
BitmapFilter Buffers: 58
CacheAsBitmap Buffers: 39
Main Screen Buffer: 2,344
Other Bitmap Memory: 119
ByteArrays: 0
SWF Files: 102,263
Network Buffers: 128
Uncategorized: 85,868
无论loader.removeAll()
,loader.clear()
,loader.getContent("XXX", true)
和Bulkloader.removeAllLoader()
,这些过冲都不能成为GC。
有人可以体验如何处理这个问题吗?