运行时加载的资产是否会消耗内存/资源(如果它们没有被使用)?编译资产多?

时间:2012-03-12 18:02:36

标签: actionscript-3 flash flex browser actionscript

我正在为拥有大量资产的浏览器制作游戏,但并非所有这些游戏都需要立即使用。我决定是在编译时嵌入我的资产还是在运行时加载它们。 我不关心加载时间 - 只关注运行期间游戏的性能。

  1. 如果我加载这些资产并将它们存储到内存中以便以后在游戏中使用,它们是否会消耗掉在AssetLoader中潜伏的系统资源?这会影响表现吗?
  2. 如果我嵌入这些资产,它们是否会消耗系统资源只是潜伏在已编译的SWF中?
  3. 这两种方法之间的性能有差异吗?

2 个答案:

答案 0 :(得分:3)

  1. 是的,也许(取决于可用的RAM,在现代机器上没有 运行3D studio max我不认为这将是一个主要问题, 记忆很便宜)。
  2. 在记忆方面是肯定的,参见上文 性能
  3. 这取决于,但在一个例子中我尝试了一切 我认为,本地嵌入式vs负载在运行时差异可以忽略不计 我将使用运行时加载,因为我想加载一组 图像做翻书式动画。
  4. 请参阅此处的示例(启用源视图,下面链接显然“纯AS3”项目在发布版本中选中源视图的框时未正确设置右键菜单):

    http://www.shaunhusain.com/DrawTextRandomly/

    http://www.shaunhusain.com/DrawTextRandomly/srcview/

    在上面的例子中要注意的一些事情,每张图像大约1.5Kb,它为爆炸动画加载了90张图像。一次又一次地使用1个加载器需要大约4秒钟来运行本地我将它增加到使用90个加载器,这样它们都会同时发生并且将其降低到500毫秒,这在我看来是合理的。嵌入需要我为每个图像写出嵌入(我在循环中使用了一个跟踪来完成测试,但是使用图像的运行时性能为零,我认为应该是预期的)和你一样,我不太关心在启动过程中加载条几秒钟,但不想继续添加Embeds,因为它只会使代码变得混乱,所以我要运行时加载(至少现在)。

答案 1 :(得分:3)

  1. 它们将消耗RAM,但不消耗CPU周期。游戏中的性能仅在使用所有RAM并且程序需要在硬盘上使用虚拟内存时受到影响。

  2. 嵌入式资产位于RAM中,就像上面描述的运行时加载资产一样。但是,它们可能会使用较少的RAM,因为在编译期间编译为SWF字节码时,它们的文件大小可能会减少。

  3. CPU上唯一的性能影响来自加载和实例化过程。

    • 在运行时加载资产时,用于获取资产的Loader对象将在收集外部数据时使用CPU周期。已编译的资产已经加载,因此他们赢得了这场战斗。
    • 在构建期间,使用与运行时加载的资产略有不同的过程创建编译资产。他们需要不同的时间来构建。我不确定这些过程有何不同,但我认为它可以忽略不计。如果被加载多次,我相信运行时加载的资产是从系统的缓存中获取的,而编译后的资产存在于SWF中。运行时加载的资产也可以是SWF中的符号,这些符号作为运行时共享库​​的一部分导出以供运行时共享。