该死的内存泄漏。。。谁帮解决一下

蓝色_冰点 2011-02-15 11:39:29
这个内存泄漏,来自Loader和SwfLoader
因为需要,做了个框架的swf,假设为a.swf
这个a.swf要通过Loader或SwfLoader加载另外一个模块b.swf,其中b.swf是可以独立运行的一个swf

我不用module的方式加载的原因,是因为还有未知的n个swf模块,如果用module的方式加载的话,这些模块和框架要在同一个工程下编译,以保证作为框架的a.swf中被编译了这n个swf模块所需要的资源(主要应该是皮肤)才会正常运行。flex3好象不存在这个问题,flex4有这样的现象,根据错误提示,应该是flex4的皮肤机制导制的

我已经成功通过Loader或SwfLoader加载新的模块,是以new ApplicationDomain()方式加载的。
如果是ApplicationDomain.currentDomain的话,会出现使用module方式加载模块时的错误一样,而且新加载的模块,不会出现加载进度条。new ApplicationDomain()是会出现加载进度条的。但这样模块就不能直接与框架通信,但问题也通过其它方式解决了。

主要问题来了,当Loader或SwfLoader加载模块后,运行结束,再通过unloadAndStop方法关闭,然而发现,所占用的内存并没有被释放。后来加上了System.gc();以及网上广为流传的hack方式进行内存回收,也就是
try{
(new LocalConnection).connect("foo");
(new LocalConnection).connect("foo");
}catch(e:*){}
均告无效。多次加载模块,内存一直往上升个不停

求个解决方法啊。。。。
...全文
221 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijianxiangde100 2011-02-16
  • 打赏
  • 举报
回复
import flash.net.LocalConnection;
import flash.system.System;

/**
* GC 类,即时回收部使用的变量
*/
public class Memory
{
public function Memory()
{
//TO DO
}
/**
* 回收的方法
*/
public static function gc() : void
{
try
{
new LocalConnection().connect( 'foo' );
new LocalConnection().connect( 'foo' );
}
catch ( e : * ) {}
}
public static function get used() : Number
{
return System.totalMemory;
}
}
蓝色_冰点 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyyuns 的回复:]
看看别人总结的帖子吧,也许对你有帮助
http://www.cnblogs.com/sinsoul/archive/2010/12/05/1897047.html
[/Quote]
谢谢,此类的贴看得多了,没用的,如下:
[Quote=引用楼主 sharp_ice 的回复:]
主要问题来了,当Loader或SwfLoader加载模块后,运行结束,再通过unloadAndStop方法关闭,然而发现,所占用的内存并没有被释放。后来加上了System.gc();以及网上广为流传的hack方式进行内存回收,也就是
try{
(new LocalConnection).connect("foo");
(new LocalConnection).connect("foo");
}catch(e:*){}
均告无效。多次加载模块,内存一直往上升个不停
[/Quote]
蓝色_冰点 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yijianxiangde100 的回复:]
import flash.net.LocalConnection;
import flash.system.System;

/**
* GC 类,即时回收部使用的变量
*/
public class Memory
{
public function Memory()
{
//TO DO
}
/**
……
[/Quote]
我都说过了,这代码也不起作用。
或者在其它地方有用,但在Loader和SWFLoader身上没用
jwxkk 2011-02-15
  • 打赏
  • 举报
回复
swf就是越跑越大...
liuyyuns 2011-02-15
  • 打赏
  • 举报
回复
看看别人总结的帖子吧,也许对你有帮助
http://www.cnblogs.com/sinsoul/archive/2010/12/05/1897047.html
xlgp2171 2011-02-15
  • 打赏
  • 举报
回复
有可能对象还处于可达状态
估计内存就消耗在Loader或SwfLoader里面

4,327

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧