Flash高性能开发基础系列—内存篇
内存优化在项目是一个重要的环节,如果不合理的利用和回收内存会合你的程序整体大大下降.
合理使用对象创建不同对象一般所消耗的内存是不一样的。如:Number 消耗 8 个字节,int消耗 4个字节,uint消耗 4个字节.下面我举一些例子: 1.int 类可使用表示为 32 位带符号整数的数据类型。 int 类表示的值的范围是:-2,147,483,648 (-2^31) 到 2,647 (2^31-1),所以如果你的取值范围在-2,647 (2^31-1)请你用int而不是用Number(刚从2.0转过来的人可能喜欢用Number).uint 范围是0 到 4,294,967,295 (2^32-1) 之间,Actionscript3中类型很少,所以这些只要你平时稍加注意一下就行. 以上只是2个常见的实例,其实在as3中还有很多值得注意的这类情况。我还看到有些大哥为了派发一个事件而去继承Sprite类,Sprite需要消耗400字节,EventDispatcher只需要40字节. 对象重用简单的说就是重复使用对象,而不是释放再重新申请,你可能这么认为:释放一个对象回收100字节的空间,我重新在new一个又占用100字节,返正都得占用100字。在flashplayer中不是说你想释放就能释放的,垃圾回收是由flashplayer来执行的,程序是不能控制,更不知道他是什么时候来执行的.所以对于我们来说回来是完全不可控的.所以说你觉得可回收了对象,很可能没回收继续占用空间直到flashplayer觉得内存不够时才可能执行垃圾回收从而被释放.而执行垃圾回收是非常耗费资源的操作尤其在大型的项目中. 虽然我们不能控制垃圾回收,但是我们可以降低垃圾回收器执行的次数,这就是我们尽量做到不去new,而使用现有的对象。这些做还有个好处就是,节省了创建对象的性能开销. 这里是不断的创建对象
?[Copy to clipboard]
View Code?ACTIONSCRIPT
对象池技术对象池技术的原理就是回收不使用的对象而不是遗弃等待FlashPlayer垃圾回器的执行,等到再需要时再拿来使用.这种技术使用非常广泛,看下面的简单的实现(这里只是一个抛砖引玉,具体怎么设计这个对象池,要看各位的具体项目了). IRecyclable接口,可以被回收对象必须实现。再就是ObjectPool.
|