我们已经有了大量的代码库编译,并开始在FlasCC中运行。当您刚刚打开.swf时,播放器的内存使用量是300 is。这或多或少是很好的,因为似乎仍然有大约300 to的动态分配内存可供C++代码使用。
当我们创建线程时问题就开始了。根据文件,每个线程在内存中复制.swf并在沙箱中运行。这是否意味着每个线程都会消耗掉播放器用来打开.swf的~300 to内存?
看来是这样的。我做了一个简单的测试,测试产生线程和释放内存使用情况( flash.system.System向我们报告的内容,以及CModule.ram.length)。这是日志:
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工作人员消耗更少的内存?
发布于 2013-03-13 02:40:28
如果考虑到,则可以传递要执行的任何AS3文件。
大多数示例(在AS3中)建议传递当前的SWF字节,然后使用类似于Worker.current.isPrimordial的内容来决定该做什么。
因此,虽然我认为您不能避免这样一个事实:您将拥有与线程一样多的player实例,更好的方法是使worker SWF一个单独的模块不像主SWF那样回收更多的内存。
特别是对于您的情况,我意识到这可能非常困难,因为您依赖Adobe对工人的p线程实现,这显然只是作为工作人员在主SWF文件中传递。此外,使用线程将现有的C/C++代码库移动到AS3工作人员绝非易事。
https://stackoverflow.com/questions/15371381
复制相似问题