【问题标题】:How to detect memory leaks in Flash?如何检测 Flash 中的内存泄漏?
【发布时间】:2010-02-11 18:15:27
【问题描述】:
如何知道编译后的 SWF 文件是否存在内存泄漏?
是否有工具、firebug 设置等...查看是否有问题?除了文件大小和加载时间之外,我在调试 Flash 播放器中找不到太多内容。
我有一个我维护的大型 Flash 应用程序,我怀疑它使用了太多内存,所以我想在它执行时测量正在使用的 RAM 量,以找到需要优化的关键区域。
任何帮助将不胜感激。
【问题讨论】:
标签:
apache-flex
flash
actionscript
【解决方案2】:
您真正能做的就是在应用程序启动时检查您的内存使用情况,以及更改时的使用情况。
要获取当前使用的内存量,您可以:
var initial_memory:Number = Number(System.totalMemory/1024).toFixed(2));
在您的应用程序开始时执行此操作(即,当所有内容都完成加载时)
然后,启动 Timer 并使用 TimerEvent.TIMER 处理程序或添加 Event.ENTER_FRAME 事件侦听器并执行以下操作:
var current_memory:Number = Number(System.totalMemory/1024).toFixed(2));
现在您有了 initial_memory 使用情况和 current_memory 使用情况。如何选择使用这些取决于您。您可以从 current_memory 中减去 initial_memory 以获得您的增量。您可以在舞台上的文本字段中显示它们,将它们写入 FireBug 的控制台,或在输出窗口中跟踪它们。
然后只需单击即可。如果你做一些增加记忆的事情,那没关系。但是,如果您有一些应该卸载的东西,但没有卸载,那么您就有了泄漏。
【解决方案3】:
Jun Hinder 在 09 年的 360|Flex 演示中介绍了 Profiler 的基础知识……或者那可能是 08 年……无论如何,我建议研究 Profiler 基础知识。