代码之家  ›  专栏  ›  技术社区  ›  Todd Moses

如何检测闪存中的内存泄漏?

  •  3
  • Todd Moses  · 技术社区  · 14 年前

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

    是否有工具、火虫设置等…看看有没有问题?除了文件大小和加载时间,我在调试Flash播放器中找不到太多。

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

    任何帮助都将不胜感激。

    3 回复  |  直到 14 年前
        1
  •  4
  •   sberry    14 年前

    您真正能做的就是在应用程序启动时以及更改时检查内存使用情况。

    要获取当前使用的内存量,可以执行以下操作:

    var initial_memory:Number = Number(System.totalMemory/1024).toFixed(2));
    

    在应用程序的一开始就进行此操作(即,当所有内容都完成加载时)

    然后,启动一个计时器并使用timer event.timer处理程序或添加一个事件。进入“帧事件侦听器”并执行以下操作:

    var current_memory:Number = Number(System.totalMemory/1024).toFixed(2));
    

    现在您有了初始的内存使用和当前的内存使用。你如何选择使用这些取决于你自己。您可以从当前内存中减去初始内存,得到增量。您可以在舞台上的文本字段中显示它们,将它们写入Firebug的控制台,或者在输出窗口中跟踪它们。

    然后点击周围。如果你做了一些增加记忆的事情,那没关系。但是,如果你有一些应该卸载的东西,而不是,那么你就有了一个漏洞。

        2
  •  5
  •   cliff.meyers    14 年前

    我建议您也看看FlexBuilder分析器。如果您将代码划分成一个模块,加载它,与它交互,然后卸载它,那么您可以很容易地看到内存中是否还有来自模块的类。通常这是由于事件侦听器不使用弱引用(addEventListener方法中的第5个参数)。

    此外,此博客文章和有关Flash播放器内存管理的相关演示值得一读:

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

        3
  •  2
  •   jeremym    14 年前

    JunButter在2009年的360度Flex演示中介绍了分析器的基础知识…或者是08年…不管怎样,我建议您研究一下探查器的基本知识。

    推荐文章