Memory Actionscript+;谷歌地图API内存泄漏
我以前从未使用过actionscript,但为了让地图正常工作,我不得不深入研究它 我正在使用以下代码添加地图标记,如果存在,则替换以前的地图标记:Memory Actionscript+;谷歌地图API内存泄漏,memory,actionscript,maps,memory-leaks,Memory,Actionscript,Maps,Memory Leaks,我以前从未使用过actionscript,但为了让地图正常工作,我不得不深入研究它 我正在使用以下代码添加地图标记,如果存在,则替换以前的地图标记: public var tracer:Array = new Array(); public var tracerLng:Number = 0; for ( var i : Number=1 ; i<64000 ; i++) { //Check if there is already a marker, if so get rid o
public var tracer:Array = new Array();
public var tracerLng:Number = 0;
for ( var i : Number=1 ; i<64000 ; i++)
{
//Check if there is already a marker, if so get rid of it
if(tracerLng > 0) {
map.removeOverlay(tracer[0]);
tracer[0] = null;
tracer.pop();
}
// Set up a marker
var trackMrk:Marker = new Marker(
new LatLng(_lat, _lng),
new MarkerOptions({
strokeStyle: new StrokeStyle({color: 0x987654}),
fillStyle: new FillStyle({color: 0x223344, alpha: 0.8}),
radius: 12,
hasShadow: true
})
);
//Add the marker to the array and show it on the map
tracerLng = tracer.push(trackMrk);
map.addOverlay(tracer[0]);
}
公共变量跟踪器:数组=新数组();
公共变量:编号=0;
对于(变量i:Number=1;i 0){
地图移除覆盖(跟踪器[0]);
跟踪器[0]=null;
tracer.pop();
}
//设置标记
var trackMrk:Marker=新标记(
新板条(_-lat,_-lng),
新标记选项({
strokeStyle:新的strokeStyle({color:0x987654}),
fillStyle:新的fillStyle({color:0x223344,alpha:0.8}),
半径:12,
哈沙多:没错
})
);
//将标记添加到阵列并在地图上显示
tracerLng=tracer.push(trackMrk);
map.addOverlay(tracer[0]);
}
我的第一个问题是运行这段代码(64000次重复是为了测试,最终的应用程序不需要运行那么多次)。无论哪种方式,内存使用量都会增加约4kB/s—如何避免这种情况发生
第二,有谁能给我建议如何使这个节目更优雅
提前感谢您的建议这不是内存泄漏,它可能是创建事件的结果-输入帧、鼠标事件、自定义事件等。如果您的内存不会一直不断增加,则无需担心-它将在适当的时候被垃圾收集 代码中的一些要点:
数组似乎什么都不做——一次只能保存一件东西,因此数组毫无意义。如果需要数组,请使用Vector。它更小更快。如果您创建一个具有特定长度的tracer
- 除非需要,否则不要创建新的
标记。重用旧对象。了解对象池:或
和LatLng
(包括笔划和填充对象)似乎没有改变(我假设MarkerOptions
对象允许您设置新位置)。如果是这样的话,不要在不需要的时候创建新的。如果需要创建新样式,LatLng
和StrokeStyle
似乎是“创建一次,到处使用”策略的理想选择FillStyle
- 在
类中创建Marker
函数或类似函数,并在需要删除时显式调用它(就在将其设置为destroy()
或从数组中弹出之前)。在null
函数中,将所有参数设置为非基类(int、Number、String等)。垃圾收集使用引用计数方法和标记和清除方法运行。理想情况下,您希望使用引用计数运行所有内容,因为它收集得更快,并且可以停止程序中的任何暂停destroy()