AS3参考内存长度/大小

时间:2014-10-17 13:55:18

标签: arrays actionscript-3 flash

我想知道ActionScript中对某个对象的单个引用占用了多少内存?

如果我有一些对象的实例数组并希望按特定顺序处理它们,我会创建另一个uint数组或向量,并在第一个数组中显示它们。

我可以计算分配特定数量的uint需要多少内存,但不知道创建另一个数组作为引用集需要多少。我想每个引用都需要指定对象的类型,因此它可能超过32位。

我想数字对象也需要在某些时候有引用但是如果我创建向量它将是内存中的连续数据,并且只有这个向量将包含有关其成员类型以及它将如何影响处理的信息效率η

也许一个简单的代码将更好地阐明我的意思。 所以,基本上我的问题是哪些方法在内存使用方面(以及速度方面)更有效:

var mo, tu, we, th, fr, sa, su:Object;
var days:Array = [mo, tu, we, th, fr, sa, su];
var daysOff:Array = [mo, we, fr];

for (var i:int = 0; i < daysOff.length; i++){
    trace(daysOff);
}

var mo, tu, we, th, fr, sa, su:Object;
var days:Array = [mo, tu, we, th, fr, sa, su];
var daysOff:Array = [0, 2, 4];

for (var i:int = 0; i < daysOff.length; i++){
    trace(days[daysOff[i]]);

}

我可以比较序列化的数据长度,但我不相信,因为像私有成员这样的大量数据因序列化过程而丢失。 是否深入解释了AS3中的对象引用?

1 个答案:

答案 0 :(得分:0)

通过使用ByteArray.writeObject()序列化数据然后计算字节数组的长度,可以计算出任何对象数据的大小。

遗憾的是,没有简单的方法可以计算出完整对象的完整大小及其所有功能和属性。 Actionscript缺乏直接与内存区域交互的能力,即使具有这样的能力,ActionScript Object的所有部分本身都是对象引用(包括函数),您需要进行递归扫描以保持隧道遍历所有引用,直到你找到了基础数据表示。