Actionscript 3 在工人之间传递20000件物品>;表演命中率?

Actionscript 3 在工人之间传递20000件物品>;表演命中率?,actionscript-3,air,Actionscript 3,Air,我想在一个worker中创建大约20000个“Person”对象,然后将它们传递给主应用程序 我知道这些对象将在线程之间克隆,并且“Person”支持AMF序列化 但是我担心性能——当我收到成千上万的物品时,我的游戏会受到性能的影响吗?当前帧是否会卡住?还是航空公司会处理好它,这将是一笔顺利的交易 我们将感谢您在这个问题上提供的任何帮助 谢谢 更新: 我正在创建的对象是某种动画指令,而不是机器人和人工智能 它们以二进制格式下载,并序列化为AS3对象 我的游戏必须在活动播放期间加载它们,今天我付出

我想在一个worker中创建大约20000个“Person”对象,然后将它们传递给主应用程序

我知道这些对象将在线程之间克隆,并且“Person”支持AMF序列化

但是我担心性能——当我收到成千上万的物品时,我的游戏会受到性能的影响吗?当前帧是否会卡住?还是航空公司会处理好它,这将是一笔顺利的交易

我们将感谢您在这个问题上提供的任何帮助

谢谢

更新:

我正在创建的对象是某种动画指令,而不是机器人和人工智能

它们以二进制格式下载,并序列化为AS3对象

我的游戏必须在活动播放期间加载它们,今天我付出了4-5帧被卡住的痛苦代价

如果工作人员能够下载并创建它们,如果主线程能够接收它们而不被卡住,我将称之为胜利。。。 我只需要一个线程,它将创建大约20000个对象。 该后台线程将这些对象发送到主线程。 如果主线程在接收/反序列化对象时不会被卡住-挑战已完成

所以我希望主线程上的反序列化不会坚持下去

我走对了吗


谢谢你的回答

你真的需要在这里使用工人吗?使用此设置,只在主线程上创建它们可能会更容易、更快,而不是千方百计地设计一个工作线程,只通过反序列化的方式在主线程中重新创建这些对象。工作线程的设计目的不是创建对象,而是处理对象。所以您应该在主线程中创建它们。是的,这将导致冻结,但你可以创建更小的批,每帧一个,以避免应用程序暂停。UPD:我建议遵循Vesper的建议:将整个块分割成更小的块,可以在几个帧的过程中在主线程中处理。比如,每帧1000帧,20帧,不到1秒,你还可以显示某种“加载时请等待”的进度来平滑用户体验。我的观点是:你需要解决的是真正的问题,不是应用程序在处理大量数据时出现口吃(这是意料之中的),但用户可能会经历难看的滞后。因此,您不应该走工人的路,这很复杂,对整体性能的影响甚至更糟,甚至可能无法改善这种滞后(因为传递和反序列化20K对象可能比创建它们的工作量更大),但是你应该设计一个用户体验解决方案,为用户屏蔽延迟,或者以一种可以容忍的方式呈现。这样AIR就不会在转移到主线程时“无声地”创建这些对象了?真遗憾。。。这可能是一个纯粹的线程解决方案。。。事实上,我可以将这些对象放在一个工作线程中,然后将它们成批传递给主线程,这样AMF的反序列化就不会影响游戏性。。。但是仅仅因为这看起来太过设计而雇佣工人……你真的需要在这里雇佣工人吗?使用此设置,只在主线程上创建它们可能会更容易、更快,而不是千方百计地设计一个工作线程,只通过反序列化的方式在主线程中重新创建这些对象。工作线程的设计目的不是创建对象,而是处理对象。所以您应该在主线程中创建它们。是的,这将导致冻结,但你可以创建更小的批,每帧一个,以避免应用程序暂停。UPD:我建议遵循Vesper的建议:将整个块分割成更小的块,可以在几个帧的过程中在主线程中处理。比如,每帧1000帧,20帧,不到1秒,你还可以显示某种“加载时请等待”的进度来平滑用户体验。我的观点是:你需要解决的是真正的问题,不是应用程序在处理大量数据时出现口吃(这是意料之中的),但用户可能会经历难看的滞后。因此,您不应该走工人的路,这很复杂,对整体性能的影响甚至更糟,甚至可能无法改善这种滞后(因为传递和反序列化20K对象可能比创建它们的工作量更大),但是你应该设计一个用户体验解决方案,为用户屏蔽延迟,或者以一种可以容忍的方式呈现。这样AIR就不会在转移到主线程时“无声地”创建这些对象了?真遗憾。。。这可能是一个纯粹的线程解决方案。。。事实上,我可以将这些对象放在一个工作线程中,然后将它们成批传递给主线程,这样AMF的反序列化就不会影响游戏性。。。但仅仅为了这个目的而雇佣工人似乎过于设计了。。。