优化办法 使用属性级的并联 例:需要实现以个Unit 列表,每个元素都是一个 Unit 结构 public class Unit { public var nShape:int; public var nX:int; Public var nY:int; } ;
7.
Version1: public classUnitArray { private var m_UnitArr:Array; public UnitArray(num:int) // 构造函数 { m_UnitArr = new Array; for(var i:int = 0 ; i < num ; i++) { m_UnitArr[i]=new Unit; } } // 使用索引访问对象属性 public var GetUnit(idx:int):Unit { return m_UnitArr[idx]; } } 假设包含 10000 个 UNIT 那么系统中保存的对象数量是 100001 个 (Num+1 个 ) 增加 UNIT 将改变对象数量
8.
Version2 public classUnitArray { public static const ATTR_SHAPE=0; public static const ATTR_X=1; public static const ATTR_Y=2; private var nShapeArr:Array; private var nXArr:Array; private var nYArr:Array; public UnitArray(num:int) // 构造函数 { nShapeArr = new Array(num); nXArr = new Array(num); nYArr = new Array(num); } …… // 使用索引访问对象属性 public function Get/SetShape(idx:uint,value:int); public function Get/SetX(idx:uint,value:int); public function Get/SetY(idx:uint,value:int); } 这种情况下 表示同样的数据内容对象开销仅为 ( 属性数量 +1) 增加一个 UNIT 并不改变总对象数量
9.
Version3 public classUnitArray { public static const ATTR_SHAPE:int =0; public static const ATTR_X:int =1; public static const ATTR_Y:int =2; public static const ATTR_MAX:int = 3; private var nAttrMap:Array=new Array[ATTR_MAX]; public UnitArray(num:int) // 构造函数 { for(var i:int = 0;i<ATTR_MAX;i++) { nAttrMap[i]=new Array(num); } } …… // 使用索引访问对象属性 public function GetAttr (idx:uint,Attr:int):int; public function SetAttr (idx:uint,Attr:int,value:int):void; } 这种情况下调整了对象访问形式可以更简单的组织数据