查看: 1987|回复: 12

DatabasePager

[复制链接]

该用户从未签到

发表于 2010-6-4 13:59:45 | 显示全部楼层 |阅读模式
应用DatabasePager于pagelod节点,实现了调度效果但内存为什么不能及时卸载掉,请问是什么原因啊?

该用户从未签到

发表于 2010-6-4 14:05:48 | 显示全部楼层
OSG的动态调度策略大致是这样的:维护一个PagedLOD的列表,当这个列表中的节点数量超过定值时,将位于视点外且停留时间最长的节点卸载掉,直至节点数量符合定值为止。因此当您的PagedLOD数据有限时,OSG不会将它们卸载,这样可以保证数据的迅速调度

该用户从未签到

 楼主| 发表于 2010-6-4 14:19:34 | 显示全部楼层
哦,那么能不能设置这个列表的长度,怎样设置啊?

该用户从未签到

发表于 2010-6-4 16:19:42 | 显示全部楼层
好象是setTargetMaximumNumberOfPageLOD(),默认的貌似是300

该用户从未签到

 楼主| 发表于 2010-6-5 11:03:30 | 显示全部楼层
谢谢大家了,可是我已经把他设成50了,可是内存好像一直不能清空,最后全部交换成了虚拟内存,导致虚拟内存飙到3个多G,是不是自己用的不对啊?

该用户从未签到

发表于 2010-6-7 08:18:36 | 显示全部楼层
那恐怕是您自己代码的问题

该用户从未签到

 楼主| 发表于 2010-6-8 09:02:33 | 显示全部楼层
呵呵……谢谢大家。我再找找原因吧。

该用户从未签到

 楼主| 发表于 2010-6-8 18:48:12 | 显示全部楼层
今天按老大的OpenSceneGraph 三维引擎设计与实践 的书中给的那个例子试验了一下,好像也不能正确清理内存,请问大家有人试过这个例子么,是什么原因啊?

该用户从未签到

 楼主| 发表于 2010-6-9 09:44:02 | 显示全部楼层
应用setTargetMaximumNumberOfPageLOD()设置为50时,加载到2G多后,然后将视点远离模型加载范围,结果等了1个小时内消耗没有多少了,但虚拟内存仍然是2G多。

该用户从未签到

发表于 2010-6-9 10:37:58 | 显示全部楼层
我那个例子没有达到setTargetMaximumNumberOfPageLOD的限制,所以不会清理内存。此外我不知道您的OSG版本是否比较古老,这些特性本身都是比较新的

该用户从未签到

 楼主| 发表于 2010-6-9 12:26:13 | 显示全部楼层
我用viewer->getDataBasePage()->setTargetMaximumNumberOfPageLOD(50),我用的是osg 2.8.2的版本,老大是不是viewer->getDataBasePage()->setTargetMaximumNumberOfPageLOD(50)不对,还是自己调用的时机不对啊?

该用户从未签到

发表于 2010-6-9 12:27:55 | 显示全部楼层
这样应该就可以了,在程序运行之前调用这个函数即可

该用户从未签到

 楼主| 发表于 2010-6-9 12:36:38 | 显示全部楼层
好的,谢谢老大了,看来还得仔细研究一下源码才行,现在正在拜读您的《最长的一帧》,希望能有所收获找到问题的原因所在。谢谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表