文档从互联网中收集,已重新修正排版,
word
格式支持编辑,如有帮助欢迎下载支持。
1
如有帮助欢迎下载支持
内存优化在项目是一个重要的环节,如果不合理的利用和回收内存会合你的程序整体大大下降
.
合理使用对象
创建不同对象一般所消耗的内存是不一样的。
如
:Number
消耗
8
个字节
,int
消耗
4
个字节
,
uint
消耗
4
个字节
.
下面我举一些例子
:
1. int
类可使用表示为
32
位带符号整数的数据类
型。
int
类表示的值的范围是:
-2,147,483,648
(-2^31)
到
2,147,483,647
(2^31-1)
,所以如果你的取值范围在
-2,147,483,648
(-2^31)
到
2,147,483,647 (2^31-1)
请你用
int
而不是用
Number(
刚从
2.0
转过来的人可能喜欢
用
Number).uint
范围是
0
到
4,294,967,295 (2^32-1)
之间
,Actionscript3
中类型很少,所以
这些只要你平时稍加注意一下就行
.
2.
合理使用
Shape
与
Sprite,MovieClip,
你可能用
MovieClip
可以完成
Sprite
与
Shape
的功
能,但是他们所需的内存是不一
样的
Shape
需要
236
字节
,Sprite
需要
412
字节
, MovieClip
需要
440
字节
,
如果你只想显示图形没有交互那你使用
Shape,
如果是有交互的图形你可以用
Sprite,
如果是动画你才用
MovieClip.
以上只是
2
个常见的实例,
其实在
as3
中还有很多值得注意的这类情况。
我还看到有些大哥为了派
发一个事件而去继承
Sprite
类
,Sprite
需要消耗
400
字节
, EventDispatcher
只需要
40
字节
.
对象重用
简单的说就是重复使用对象,而不是释放再重新申请
,
你可能这么认为:释放一个对象回收
100
字节的空间,
我重新在
new
一个又占用
100
字节,
返正都得占用
100
字。
在
flashplayer
中
不
是说你想释放就能释放的
,
垃圾回收是由
flashplayer
来执行的,程序是不能控制,更不知道他是
什么时候来执行的
.
所以对于我们来说完全不可控
的
.
所以说你觉得可回收了对象,很可能没回收
继续占用空间直到
flashplayer
觉得内存不够时才可能执行垃圾回收从而被释放
.
而执行垃圾回收
是非常
耗费资源的操作尤其在大型的项目中
.
虽然我们不能控制垃圾回收,
但是我们可以降低垃圾回收器执行的次数,
这就是我们尽量做到不去
new,
而使用现有的对象。这些做还有个好处就是,节省了创建对象的性能开销
.
这里是不断的创建对象
1.
var size:Rectangle;
2.
var bitmap:BitmapData=new BitmapData(100,100);
3.
for (var:int = 0; i
4.
{
5.
size = new Rectangle(i,0,1,10);
6.
myBitmapData.fillRect(size,COLOR);
7.
}
重用对象
1.
var bitmap:BitmapData=new BitmapData(100,100);
2.
var size:Rectangle = new Rectangle(0,0,1,10);
3.
for (var:int = 0; i
4.
{
5.
size.x = i;