自定义组件有两种方法,一种是使用MXML来定义组件,一种是直接使用ActionScript来自定义组件。但是这两种方法中哪个占用的内存会更多些呢?有人已经作了这方面的测试。原文见这里
分别使用mxml和as来向界面上添加组件
mxml方式:
<mx:Button/> <mx:TextInput/>
<mx:Button/> <mx:TextInput/>
<mx:Button/> <mx:TextInput/>
as方式:
var amount:Number = 1;
for(var i:Number = 0 ; i < amount; i++)
{
addChild(new Button());//addChild(new TextInput())
}
测试环境:
硬件: Intel P4 3.0G | 1.93G RAM
操作系统: Windows XP sp2
播放器版本: Flash Player 9.0.115
Flex SDK: Flex 2.0.1 Hotfix 3
测试结果:
没有使用任何按钮时 :14596k(0) 1个MXML按钮 1个AS按钮 比较 内存大小 14984k 14852k 14984-14852=132 和没有使用任何组件时的比较 14984-14596=388 14852-14596=256 132/1 = 132 30个MXML按钮 30个AS按钮 比较 内存大小 15528k 15352k 15528-15352=176 和没有使用任何组件时的比较 15528-14596=932 15352-14596=756 176/30=5.8667 120个MXML按钮 120个AS按钮 比较 内存大小 17140k 16924k 17140-16924=216 和没有使用任何组件时的比较 17140-14596=2544 16924-14596=2328 216/120 = 1.8 240个MXML按钮 240个AS按钮 比较 内存大小 18932k 18584k 18932-18584=348 和没有使用任何组件时的比较 18932-14596=4336 18584-14596=3988 348/240=1.45
没有使用任何 TextInput:14596k(0) 1个MXML方式TextInput 1个AS方式TextInput 比较 内存大小 14988k 14896k 14988-14896=92 和没有使用任何组件时的比较 14988-14596=392 14896-14596=300 92/1=92 4个MXML方式TextInput 4个AS方式TextInput 比较 内存大小 15024k 14968k 15024-14968=56 和没有使用任何组件时的比较 15024-14596=428 14968-14596=372 56/4=14 30个MXML方式TextInput 30个AS方式TextInput 比较 内存大小 15588k 15300k 15588-15300=288 和没有使用任何组件时的比较 15588-14596=992 15300-14596=704 288/30=9.6 120个MXML方式TextInput 120个AS方式TextInput 比较 内存大小 16740k 16520k 16740-16520=220 和没有使用任何组件时的比较 16740-14596=2144 16520-14596=1924 220/120=1.8333 1000个MXML方式TextInput 1000个AS方式TextInput 比较 内存大小 30588k 29620k 30588-29620=968 和没有使用任何组件时的比较 30588-14596=15992 29620-14596=15024 968/1000=0.968
结论:
正如上面数据显示的那样,随着组件数量的增加,mxml和as之间占用内存的差距越来越小,但是使用as方式仍然要比mxml方式要小一些,因此还是建议使用as方式