Flash渲染不在舞台范围内的项目吗?

时间:2012-08-24 13:17:14

标签: actionscript-3 flash

闪存足够智能“隐藏”不在舞台上的PIXELS,以减少内存使用量?或者我必须手动完成它,如果它会减少内存使用量吗?

3 个答案:

答案 0 :(得分:2)

Flash不会渲染不在舞台上的对象(根据http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e3e.html)。

但是我认为你可能会混淆两个不同的问题。

一个问题是CPU / GPU性能 - 为此,无需担心场外对象,因为Flash不会浪费时间渲染超出舞台边界的显示对象。

另一个问题是内存使用情况。无论是否在屏幕上显示,您创建的每个对象都会占用一些内存。 Flash有一个垃圾收集器,它会定期处理未使用的对象,但是“未使用的对象”意味着一个没有被任何其他对象引用的对象,所以如果你遇到内存问题,你将不得不通过删除事件监听器来手动清理对象,归零引用等。

答案 1 :(得分:1)

没有什么可以减少内存使用量。如果它在显示器上可见,则需要由Flash渲染,并在内存中存储像素颜色。

虽然Flash现在非常快,特别是硬件加速。所以你不应该过分担心性能问题,你的AS3虚拟降压会有很大的影响。我把所有的虚拟美元押在上面。

答案 2 :(得分:1)

Flash会将所有位图,影片剪辑实际存储在内存中的所有对象中。如果你有一个大于舞台的大位图,它仍会占用内存,无论你只显示它的一部分。

如果您有多个位图或动画片段可能会离开舞台并且其中没有一部分可见,那么恢复内存的唯一方法是确保该对象被取消引用并设置为null。

myMovieClip = null;

在设置为null之前,您还必须确保没有其他任何内容引用该对象,例如,它不能存储在数组中或附加任何事件侦听器,因此:

myMovieClip.removeEventListener(Event.WHATEVER, eventHandler);

对于bitmapdata对象,您需要在设置为null之前先调用dispose:

myBitmapdata.dispose();
myBitmapdata = null;

然后允许GC在选择时恢复内存,除非您使用AIR,这意味着您可以自己请求gc调用:

System.gc();

如果您正在使用Flash Builder进行开发,最佳做法是定期分析您的应用程序并按下按钮强制执行gc调用。然后,您可以查看哪些对象在内存中持久存在,并找到导致内存泄漏的引用。