当我们的Flash游戏在场景A中时,内存稳定大约800M(它几乎加载了所有角色动画和角色技能动画)。但是当切换到场景B时,内存会在一分钟内增加到1400M。我已经看过资源管理器并确保它在内存增加时不加载任何资源。当我重复它,内存增加到2000M并且资源管理器冻结时,页面崩溃了。
那么什么可能在短时间内导致这种可怕的内存泄漏?我以前没有遇到过这样的问题,我们将不胜感激。
答案 0 :(得分:1)
问题是没有提供关于你正在做什么的足够具体信息,因此很难确切地说你做错了什么。
但是有办法处理这些情况:
安装 Adobe Scout (http://gaming.adobe.com/technologies/scout/)。这是一个非常好的分析工具,可以帮助您查看应用中发生的情况。
在您的应用中启用遥测数据。 Flash Professional和Flash Builder中都有相应的设置。如果您不知道如何启用它,请搜索网络,因为它已得到很好的解释。
运行你的应用程序并查看Scout的面板,看看发生了什么以及你分配的时间是多少内存。
除此之外,还有数百个内存泄漏的原因。只需查看代码并了解何时调用什么内容并使用分析工具知道要查找的位置。
答案 1 :(得分:0)
如果使用FlashBuilder,您可以运行探查器来尝试跟踪内存泄漏并查看正在创建的实例数。如果您使用其他类型的IDE,还有其他分析工具。
如果使用专业版,您可以查看此链接Profiling tools in flash builder to improve the performance of flash professional projects
答案 2 :(得分:0)
经过几天的工作,我们终于找到了问题。
在我提出这个问题之前,我已经尝试过Scout和Profile但没有工作(因为问题没有发生)。我想只有 bitmapdata draw或copypixels functon在无限循环中或在enterframe事件处理程序中被调用时才会出现如此快速和大量的内存泄漏。
然后我们发现如何重复这个问题,这真的让解决问题变得更容易。
所以这是我们在重复问题后解决问题的程序。
在个人资料中运行游戏,并拍摄内存快照。
重复问题,内存增加很多后,拍摄内存快照。
找到内存快照之间的闲逛对象。
最后,问题是当一个技能出现时,每个帧中都会调用一个函数。在函数中,使用bitmapdata绘制角色动画