我想制作可以在支持Flash的浏览器中运行的应用程序,并决定flex对我来说最好,所以我开始学习。 AFAIK flex有一个GC,但与我见过的其他语言相比,GC的工作原理可能有所不同。我发现this但显然存在(或者是)巨大的内存泄漏无法阻止,并且在IE中运行时更糟糕。
现在可以安全地信任。有没有修复过的泄漏?
答案 0 :(得分:3)
我在一个相当大而复杂的Flex3应用程序上工作,我们没有任何可怕或无法控制的内存泄漏 - 即使在IE中也是如此。
Grant Skinner关于AS3垃圾收集的这篇文章对我非常有帮助。它发布于2006年,但它仍然完全相关(因为我们仍在使用AS3)。这是他在资源管理方面的三部分系列的一部分 - 在他的帖子中有相关文章的链接。
http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html
要理解/记住的是Flex应用程序在Flash Player中运行 - 也许你很清楚,但如果你不是来自Flash开发背景,我认为这并不是完全明显的。至少,我认为这不适合我。 :)
答案 1 :(得分:2)
发布了一篇描述Flash Player垃圾收集的Adobe DevNet文章:
http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html
在ActionScript中编程时,与内存相关的最大问题是确保不要将引用保留在不再需要的对象周围。例如,当您添加事件侦听器时,请确保在不再需要时删除该事件侦听器(或了解如何利用弱引用)。
根据我的经验,Flex Framework通常擅长此类内存簿记。应用程序的内存占用量将部分取决于您对垃圾收集器的编码情况。
如果确实遇到内存不断增加的问题,可以利用Profiler来获取和比较内存快照,以便找到泄漏的对象。您可以在此处找到有关Profiler的信息:
答案 2 :(得分:0)
您可以查看的几个资源是:Flex Bug Tracking,您可以仔细阅读已修复/记录的内存泄漏错误。此外,在Flex Builder IDE中,您可以使用Profiler监视内存/ CPU使用情况等。我无法专门回答您的问题。我认为这部分责任在于您,开发人员以及您如何设计和管理您的代码。除此之外,我注意到使用Flex 3框架(或一般的ASVM2)它已经为我管理GC做得很好。请记住,Flex 4即将到来。
答案 3 :(得分:0)
根据我的经验,随着时间的推移,Flex 2会泄漏大量内存,尤其是在Firefox 2中。我不确定Flex 3。
答案 4 :(得分:0)
我工作的人说ComboBox和自动完成事件存在错误。