apache-flex - AS3 内存保护(Loaders/BitmapDatas/Bitmaps/Sprites)

标签 apache-flex flash actionscript-3 flex3

我正在努力降低我的 AS3 应用程序的内存需求。我知道一旦没有剩余的对象引用,它就会被标记为垃圾收集的候选对象。

是否值得尝试删除对不再活跃使用的 Loader 的引用?我的第一个想法是不值得。

原因如下: 我的 Sprites 需要永久引用它们显示的位图(因为 Sprites 在我的应用程序中始终可见)。因此,位图不能被垃圾回收。位图的数据依赖于 BitmapData 对象,因此我们无法摆脱它们。 (到目前为止,一切都非常简单)。

这是我不确定发生了什么的地方: BitmapData 是否有对 Loader 加载的数据的引用?换句话说,BitmapData 本质上只是一个包装器,它具有对 loader.content 的引用,还是数据从 loader.content 复制到 BitmapData?

如果维护一个引用,那么我不会通过垃圾收集我的装载机得到任何东西......

想法?

最佳答案

在第三方产品中使用 AMF 使我相信 Loader 类试图实例化给定内容类型的新类(在本例中它将是 Bitmap 类实例)。您可能正在从 Bitmap 实例构造一个新的 BitmapData 对象。由此我假设 Loader 实例引用了 Bitmap 实例,在您的情况下,您的代码也引用了 Bitmap 实例。除非在某个时候您调用 BitmapData.clone()。

还有一些强制 GC 的方法。 Force Garbage Collection in AS3?

您可能会发现将任意大的对象附加到某物上很有用,然后强制 GC 查看该对象是否正在清理或四处漂浮。如果您使用的是 Windows,像 procmon ( http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx ) 这样的东西比任务管理器更有助于进行这种外部检查。

这当然有点试错,但由于缺少像 Visual VM (https://visualvm.dev.java.net/) 这样的东西,我们在 Flash 世界中有点被搞砸了。

关于apache-flex - AS3 内存保护(Loaders/BitmapDatas/Bitmaps/Sprites),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677835/

相关文章:

apache-flex - Silverlight 安装基础 - 它有多大?

apache-flex - Flex 3 事件在复合自定义组件上传播?

javascript - 如何从 flash as3 获取文本和矩形颜色?

actionscript-3 - Flex播放一系列声音文件

java - 使用 BlazeDS 或 Web 服务作为 Flex View 层和 Spring 业务层之间的远程处理和消息传递技术的优缺点?

apache-flex - 从文件 :///without having the user change their Flash Player security settings 运行 SWF

flash-builder - 引用错误 : Error #1065: Variable JSON is not defined

actionscript-3 - Flash CC 不会嵌入图像资源

actionscript-3 - Flex 4.6 中心图像

actionscript-3 - 在什么情况下反向循环在 Flash 中更快,为什么?