首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决FlasCC中巨大的线程内存开销?

如何解决FlasCC中巨大的线程内存开销?
EN

Stack Overflow用户
提问于 2013-03-12 20:23:49
回答 1查看 579关注 0票数 3

我们已经有了大量的代码库编译,并开始在FlasCC中运行。当您刚刚打开.swf时,播放器的内存使用量是300 is。这或多或少是很好的,因为似乎仍然有大约300 to的动态分配内存可供C++代码使用。

当我们创建线程时问题就开始了。根据文件,每个线程在内存中复制.swf并在沙箱中运行。这是否意味着每个线程都会消耗掉播放器用来打开.swf的~300 to内存?

看来是这样的。我做了一个简单的测试,测试产生线程和释放内存使用情况( flash.system.System向我们报告的内容,以及CModule.ram.length)。这是日志:

代码语言:javascript
复制
Starting 10 threads.
Memory usage: total=288MB private=335MB free=2MB CModule=33MB
Thread 0 started.
Memory usage: total=683MB private=732MB free=1MB CModule=36MB
Thread 1 started.
Memory usage: total=1071MB private=1121MB free=1MB CModule=37MB
Thread 2 started.
Memory usage: total=1459MB private=1510MB free=1MB CModule=38MB

此时,plash_player_debugger已经退出(崩溃),没有任何错误消息。

这对我们来说基本上意味着没有线程。启动2个线程后,剩下的C++代码只有~50 to的内存可用。

Adobe给出了更深层次的内存使用情况。下面是它在运行带有两个后台线程的.swf时所报告的内容:( Adobe论坛上同一问题的图片)

在生成这两个空闲线程之后,“其他”块已经从11 MB膨胀到800 MB。记忆进入了“其他玩家”和“未分类”。

因此,主要的问题是:如何解决这个问题?也许有一种方法可以让AS3工作人员消耗更少的内存?

EN

回答 1

Stack Overflow用户

发布于 2013-03-13 02:40:28

如果考虑到,则可以传递要执行的任何AS3文件。

大多数示例(在AS3中)建议传递当前的SWF字节,然后使用类似于Worker.current.isPrimordial的内容来决定该做什么。

因此,虽然我认为您不能避免这样一个事实:您将拥有与线程一样多的player实例,更好的方法是使worker SWF一个单独的模块不像主SWF那样回收更多的内存。

特别是对于您的情况,我意识到这可能非常困难,因为您依赖Adobe对工人的p线程实现,这显然只是作为工作人员在主SWF文件中传递。此外,使用线程将现有的C/C++代码库移动到AS3工作人员绝非易事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15371381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档