【发布时间】:2012-11-28 11:38:11
【问题描述】:
我一直在研究一个库,但遇到了应用程序内存问题。
我创建了一个名为 FileManager 的类,它允许用户调用一个名为 loadNewFiles 的函数 - 该函数打开一个多文件选择对话框并将每个 FileReferenceList 存储在一个向量。我可以随时调用removeList 函数并删除该列表并清除分配给该列表的所有内存和侦听器,所以一切都很好。
我创建了另一个名为 UploadManager 的类,它接受一个 FileReference 对象数组,并通过uploadFiles 函数将它们上传到 URL。内存泄漏似乎在这里。当您调用此函数时,它会添加适当的事件侦听器并调用上传函数。如果上传失败或上传完成,它会移除监听器并清除它一直在等待的向量。
在上传管理器完成文件上传后,我调用 FileManager 中的removeFiles 函数(记住,它之前工作得很好)然后...什么也没发生。文件从两个向量中删除,侦听器从两个文件中删除,但内存保持分配状态。这显然有可能导致沿途出现问题,因为通过库可用的文件、上传等数量没有限制。
【问题讨论】:
-
您如何确认内存仍然分配给这些对象?如果您在 Flash Builder 中使用分析器,它可以告诉您是什么保留了对它发现在内存中游荡的任何对象的引用。
-
@SunilD。 - 感谢您的回复,我正在使用 FlashDevelop 作为我的 IDE。对于统计数据,我使用的是我制作的自定义统计数据配置文件,它来自 Hi-Res stats github repo。
-
这个分配可能是暂时的...尝试重复测试并检查它是否不断上升。
-
1000 行代码...无法运行示例 [缺少 Stats、DownloadManager、Signal、CustomFileReference、CustomFileReferenceList 的定义]。在这种情况下很难获得可持续的东西,因为内存问题也可能与仍然拥有一些内存的任何其他实现有关。可能是您在检查内存时只运行 System.gc() 一次,而不是两次。可能导致这种情况的原因有很多,而且没有运行示例,很难说出真正的问题是什么......
-
哦,对不起。所有定义都是库的一部分,因此可以下载完整的库。但是,我不希望这样。 Imports 应该告诉你每个丢失的文件在哪里。我能够将内存问题定位到 UploadManager 的原因是,在 UploadManager 完成其任务后,FileManager 使用的确切堆内存量仍然存在.很难说某些过时的类使用了数百 MB 的堆内存(在上传电影文件的情况下,我测试过)——我从未在我的任何库类中运行
System.gc()。
标签: actionscript-3 actionscript