【发布时间】:2026-02-19 02:20:06
【问题描述】:
我有一个 Flash 项目,我在时间轴上编写了一些代码。当我加载 SWF 文件并卸载它时,分配的内存仍然存在,并且每次加载和卸载它时都会发生内存泄漏。
有解决办法吗?
我试过了,但是内存不是空闲的。
addEventListener(Event.REMOVED_FROM_STAGE, removed);
public function removed(evt:Event) {
removeEventListener(Event.REMOVED_FROM_STAGE, removed);
csc = null;
if (currentFrame == 2) {
content.removelisteners3()
try {
content.removeChildren();
} catch (e:Error) {
}
menu.removeListeners1();
try {
mc1.mc.removeChildren();
} catch (e:Error) {
}
try {
mc1.removeChildren();
} catch (e:Error) {
}
}
if (currentFrame == 3) {
menu.removeListeners2()
try {
search_ctn.removeChildren()
} catch (e:Error) {
}
try {
min_search.removeEventListener(MouseEvent.MOUSE_UP, f_min_search);
} catch (e:Error) {
}
try {
clos_search.removeEventListener(MouseEvent.MOUSE_UP, f_clos_search);
} catch (e:Error) {
}
try {
btnUpSearch.removeEventListener(MouseEvent.MOUSE_DOWN, f_btnUpSearch);
} catch (e:Error) {
}
}
try {
this.removeChildren();
} catch (e:Error) {
}
}
【问题讨论】:
-
这种方法看起来相当蛮力 - 也许隔离处置功能可能会有所帮助,例如在菜单和搜索中。使用像 Adobe Scout 这样的分析器来提供帮助。
-
您可能没有从
stage中删除所有侦听器。另外,检查System.gc()是否释放内存,但首先让它运行,因为gc()调用不会强制GC运行,而是告诉Flash播放器“嘿,你为什么不现在运行GC?”,哪个 FP 可以忽略。 -
@jason:首先感谢您安排我的代码。这是以前程序员的旧文件,我知道结构设计不正确,但我需要在不改变结构的情况下尽快修改它。我不知道 adobe scout 是什么以及它如何帮助我:(
-
@Vesper 我已尝试删除所有侦听器,但仍有问题,内存泄漏仍在发生
-
你(或任何人)不应该使用框架。不要将代码放在框架上,使用框架来运行代码等。仅将框架用于动画。保存对所有内容的引用。当您应该使用 removeChild(arrayOfReferences[i]) 时,您正在使用 removeChildren()。
标签: actionscript-3 flash memory-leaks