flash怎么强制gc_[转载]AS3强制内存回收的方法

注:AVM的GC机制确实有些诡异,不象CLR可以通过GC.Collect()显示调用,中午在天地会闲逛时,发现了下面的这二个方法,转载一下

方法1:

function GC():void{

try{

(new LocalConnection).connect("foo");

(new LocalConnection).connect("foo");}catch(e){

trace(System.totalMemory);

}

}

方法2:

package {

/**

* @author CYPL

* @date 2009-04-01

*/

import flash.net.SharedObject;

import flash.system.System;

import flash.utils.clearInterval;

import flash.utils.setInterval;

public class GCPlus {

public static function clear(isTraceTM : Boolean = false) : void {

var time : int = 2;

var interval : int = setInterval(loop, 50);

function loop() : void {

if(!(time--)) {

isTraceTM && trace(System.totalMemory);

clearInterval(interval);

return;

}

SharedObject.getLocal("cypl", "/");

}

}

}

}

测试代码:

package {

import flash.display.MovieClip;

import flash.display.Sprite;

import flash.events.MouseEvent;

import flash.system.System;

/**

* @author CYPL

*/

public class GC_Test extends Sprite {

private static const NUM : int = 1000;

private var num : int;

public function GC_Test() {

init();

}

private function init() : void {

num = NUM;

stage.addEventListener(MouseEvent.CLICK, clickHandler);

while (num--) {

var mc : MovieClip = new MovieClip;

mc.graphics.beginFill(0);

mc.graphics.drawRect(0, 0, 100, 100);

mc.x = Math.random() * 500;

mc.y = Math.random() * 400;

addChild(mc);

}

trace(System.totalMemory);

}

private function clickHandler(e : MouseEvent) : void {

clear();

}

private function clear() : void {

while (numChildren) {

removeChildAt(0);

}

GCPlus.clear(true);

}

/*function GC():void{//这是我们熟悉的方法

try{

(new LocalConnection).connect("foo");

(new LocalConnection).connect("foo");}catch(e){

trace(System.totalMemory);

}

}*/

}

}

通过System.totalMemory的结果可以清楚的看到内存得以释放,window任务管理器也能够看到有变化哦,原理也可能和异常有点关系.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值