3

我一直在研究一个库,并且遇到了应用程序内存的问题。

我创建了一个名为FileManager的类,它允许用户调用一个名为的函数loadNewFiles- 此函数打开一个多文件选择对话框并将每个FileReferenceList存储在一个向量中。我可以随时调用该removeList函数并删除该列表并清除分配给该列表的所有内存和侦听器,所以一切都很好。

我创建了另一个名为UploadManager的类,它采用FileReference对象数组并通过该uploadFiles函数将它们上传到 URL 。内存泄漏似乎在这里。当您调用此函数时,它会添加适当的事件侦听器并调用上传函数。如果上传失败或上传完成,它会移除监听器并清除它一直在等待的向量。

在上传管理器完成上传文件后,我在FileManagerremoveFiles中调用该函数(记住,它之前工作得很好)并且......没有任何反应。文件从两个向量中删除,侦听器从两个文件中删除,但内存保持分配状态。这显然有可能导致沿途出现问题,因为通过库可用的文件、上传等数量没有限制。

类:
文件管理器上传
管理器

执行

4

1 回答 1

0

从您的示例中听起来,UploadManager 仍然具有对来自传递给 uploadFiles 的向量的文件的引用,或者游戏中的某些其他对象仍然具有引用。

另请注意,System.gc() 仅适用于 Flash 播放器的调试版本。

所以你不能依赖它来选择建筑设计。当您需要“按需”查看 ActionScript 内存的消耗时,它适用于对内存密集型操作进行单元测试。

在生产产品中,ActionScript 虚拟机在检测垃圾收集的时间和地点方面非常活跃。大多数人会说它发生在你不希望它发生的时候。

尝试分析应用程序并查看相关对象(即 FileReference)的“累积实例”与“实例”,以及“累积内存”与“内存”。

您可以在运行时在 Profile View 中强制进行垃圾收集,以了解在发布版本中进行垃圾收集时实际释放了多少内存。

于 2013-02-05T03:49:58.250 回答