【问题标题】:How to detect memory leaks in Flash?如何检测 Flash 中的内存泄漏?
【发布时间】:2010-02-11 18:15:27
【问题描述】:

如何知道编译后的 SWF 文件是否存在内存泄漏?

是否有工具、firebug 设置等...查看是否有问题?除了文件大小和加载时间之外,我在调试 Flash 播放器中找不到太多内容。

我有一个我维护的大型 Flash 应用程序,我怀疑它使用了太多内存,所以我想在它执行时测量正在使用的 RAM 量,以找到需要优化的关键区域。

任何帮助将不胜感激。

【问题讨论】:

    标签: apache-flex flash actionscript


    【解决方案1】:

    我建议您也查看一下 Flex Builder 分析器。如果您将代码划分到一个模块中,加载它,与之交互,然后卸载它,您可以轻松地查看内存中是否还有模块中的类。这通常是由于事件监听器没有使用弱引用(addEventListener 方法中的第 5 个参数)。

    此外,这篇关于 Flash Player 内存管理的博文和相关演示文稿也值得一读:

    http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

    【讨论】:

      【解决方案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 基础知识。

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多