我的基本问题: System.totalMemory可以不报告内存泄漏吗?
更新:虽然我的性能问题的来源从未得到充分验证,但很可能与GPU / CPU问题(如@divillysausages假设)有关,我无法在目标系统上轻松测量。在一个奇怪而经典的奇怪的bug中,在提出这个问题的那一天,问题似乎已经解决了。出于本Q& A的目的,我认为可以安全地说System.totalMemory被准确报告。
背景:我正在开发3款全屏Adobe Air 3应用。这三款应用程序和三款VLC播放器在多屏幕Windows 7机器上不断运行。每个AIR应用程序都在六个1080p屏幕中的一个上完全屏蔽。 AIR应用程序使用Robotlegs 1.5.2(带有Lazy Mediation),AS3信号(带有轻松信号),以及我自己的样板shell,它实现了共享方面:记录器,加载器,基本UI,调度服务,配置解析器。我一直在有条不紊地测试外壳,看起来不错。所有三个应用程序定期加载数据(大约5分钟)并更新其视图和自动压力测试显示加载器和解析器即使在被更新击中时也是内存安全的。初始化后很少创建对象,应用程序或多或少只是连续更新相同的显示对象,而且大部分创建都是在启动过程中发生的。
问题:在目标系统上运行几个小时后,动画重模块的渲染率会受到影响。
这个问题显然是分层的,但我有点恼火,因为我一直在使用Flash Builder Profilier和Mr Doobs Stats工具进行分析,内存使用情况似乎在分析期间稳定得很好(即使FB Profilier做了一些奇怪的事情使用字符串:see my other question about Strings in FB Profilier)。当动画繁重的应用程序启动时,它很快就达到了一个级别的内存使用,动画性能仍然很好,然后我几小时后回来查看动画是不连贯的,不规则的,应用程序用户界面缓慢且无响应。其他两个应用程序(以低帧速率运行没有动画)看起来相当不错,分别消耗相同和更多的内存。重新启动动画应用程序可以解决问题。
更多背景信息:
动画重型应用程序将stage.frameRate调制在15到40之间,具体取决于它是否为动画 - 最初我认为一个恒定的帧速率会有所帮助,但后来我遇到了确保所有数据的麻烦 - 解析发生在动画开始之前,以防止动画想要在某种数据处理洪水的中间开始的竞争条件......我正在考虑使用一个恒定的帧,但它似乎是一个远景
使用Greensock的TweenMax进行动画制作并最初发现了我插入的内存泄漏(我自己的错误实现的情况) - 目前TimelineMax和TweenLite实例是我不断创建和销毁的一件事,他们似乎GC很好
很少创建新对象(基本上是没有事件侦听器的值对象,其值经常被覆盖) - 没有循环创建/销毁显示对象
尽可能使用信号和回调代替事件
通过尽可能多地共享和重新使用Timer对象并将其用于秒的时间来最少量的Timer实例(5-6)
使用renderMode“auto”Adobe AIR: Main Window Properties - 不确定是否应将其更改为部署到Windows 7计算机
答案 0 :(得分:1)
Choppy动画听起来像是帧速率,或者cpu / gpu被阻塞,所以你渲染受到了影响 - 即使你的记忆很好也会发生这种情况。
尝试通过单片眼镜运行您的应用,您将能够看到图形性能以及后台发生的事情:https://prerelease.adobe.com/callout/?callid=59A4F95D908A4D2FB9F302729FD0D87F
答案 1 :(得分:0)
我在工作中构建了一个类似的应用程序。它作为本机可执行文件全天候运行,并加载twitter数据和图像。我没有使用框架,但我认为这不重要。
我实际上发现了与你相反的情况,我的应用程序将在Windows上完美运行并开始在OSX上口吃。
您是否在显示器上运行测试,而不仅仅是您的开发计算机?我做了一个简单的RAM计算器,只有在点击电影时才能看到。在我调试生产时,这帮助了我。