快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: pv3d清除物体和贴图一直有问题,只要还程序中还残留指向,就会像蟑螂一样常住在你内存里










最近更新:
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(15:12:45)
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(10:01:38)
● DDM君阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(19:07:43)
浏览主题:pv3d的内存占用与清除问题

pv3d的内存占用与清除问题
yzhkof (2008-12-30 15:22:03)

最近用pv3d做了个应用,但发现在内存使用上有很多问题。。。

比如我的应用程序是Application3D

var app:Application3D=new Application3D();
app.start();
app.stop();
app=new Application3D();

...

app=null

但我发现只要你new 了多少次Application3D,内存里就有多少Application3D的实例,即使你已经去掉了所有对这实例的引用(不确定pv3d引荐里是否有引用)。

后来我又做了个简单的实验

var a:BitmapFileMaterial=new BitmapFileMateria("path");(一定要存在文件)
a.destroy();
a=null;      

发现a的实例在内存中永远都去不掉。。。。。

难道用了pv3d的类只适合做成单例的?





flash 3d 研究所
(2008-12-30 16:08:14)
是的,目前有一些这些方面的问题需要注意,有些是flash播放器的问题,下面这办法希望可以做些参考

1)viewport可以被.destroy()

2)renderer可以被.destroy()

2)位图贴图是可以被重复使用的,即使物体没有了,贴图还是存在内存中。
可以尝试下面方法,如果还是无法去掉内存占用,就是flash播放器问题
material.interactive = false;
material.animated = false;
material.bitmap.dispose();
material.destroy();




flash 3d 研究所
(2008-12-31 09:56:18)
flash是自动垃圾回收的,他会自己清除垃圾的,到达一定条件,所以内存占用的问题不需要考虑


flash 3d 研究所
(2008-12-31 11:51:48)
现在经常会出现不回收而‘内存永驻’的情况啊,哈哈


flash 3d 研究所
(2009-01-01 13:38:05)
最近两天有些事一直没上来看。。

谢谢DDM君的热心解答

不过material.bitmap一直都没有没赋值,一使用就为“无法访问空对象引用的属性或方法”,即使写在FileLoadComplete里。material.destroy()方法里也包括了material.bitmap.dispose();

而且我在profile里看到只要new BitmapFileMateria("path");(一定要存在文件) BitmapFileMateria的实例会被创建两次,而且有一个永远都不回被回收。不知道怎么回事。。。

ps:祝所有flash3d研究所里的人新年快乐^_^


flash 3d 研究所
(2009-01-01 14:55:59)
我觉得这个主要是flash的弱键dictionary的问题,目前确实是没有办法解决,下一版也许。所以目前尽量用少量和小一些的bitmap比较好。

新年快乐~


flash 3d 研究所
(2009-01-01 15:02:26)
11月份的时候此问题被修正了的(我们的傻瓜包是12月的不用担心),理论上消除掉displayObject3D物体,它的所有贴图占用的内存会自动被消除。但实际使用中,还是有些常驻于内存。个人也对这个问题很奇怪。


flash 3d 研究所
(2009-08-07 10:19:17)
我现在也遇到了了个类似的问题。我的问题是 在加载场景的例子里 内存在不断的增加,这是为什么啊?


flash 3d 研究所
(2009-08-07 11:12:52)
这是没有办法的事情,flash3d会像蟑螂一样常驻您的内存=A=

下面这篇也是同样的问题
http://flab3d.com/topicview.php?top=%E5%94%89%EF%BC%8C%E8%BF%98%E6%98%AF%E8%B5%84%E6%BA%90%E9%87%8A%E6%94%BE%E9%97%AE%E9%A2%98%E2%80%A6%E2%80%A6



flash 3d 研究所
(2010-04-06 18:36:21)
//清空3d场景
private function clearD3d(D3d:DisplayObject3D):void
{
//removeChildAt(0);
trace("====="+D3d.numChildren);
for (var i in D3d.children) {
trace(i+":-O");
var item=D3d.getChildByName(i);
D3d.removeChild(item);
}

}


flash 3d 研究所 ericvan76
(2010-04-08 08:41:35)
这个没啥好的办法,flash本身内存回收就比较麻烦,再加上PV3D里面好多对象根本没有做回收处理,所以。。。。


flash 3d 研究所 零度
(2010-04-08 22:57:23)
现在输出3D,电脑卡死了, 看来电脑得换了


flash 3d 研究所 DDM君
(2010-04-11 20:23:09)
呵呵,最好是用双核。


flash 3d 研究所 slowsay
(2011-01-18 11:47:12)
删除的内容,还是自己写一些清除方法,目前,pv3d创始人他老人家没功夫写,所以,大伙自己写一些清除bitmap的方法


flash 3d 研究所 slowsay
(2011-01-18 11:48:22)
DDM君说的是, 常驻内存,清除后,也有一个周期,cpu也是,


flash 3d 研究所 fur3
(2011-01-19 14:07:17)
flash说明文档上来说 是"没有引用"的东西就会被清空 但是pv3d里贴图因为结构相当复杂 所以应该是有的被多次引用却忘记删除


评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了