查看: 4712|回复: 7

PagedLOD中文件数据的释放问题

[复制链接]

该用户从未签到

发表于 2010-5-11 21:51:23 | 显示全部楼层 |阅读模式
请问:
在默认情况下,PagedLOD是自动控制文件中数据的加载和释放的吧。那么PagedLOD选择什么时机释放已经读取到内存中但目前已经超出其设定的显示阈值的文件数据?

这个文法好像不大清楚哈
比如说,一个模型文件aa.ive使用PagedLOD方法加载,设定他的可视范围是0-100。视点的初始化位置在此范围之内,也就是说该模型文件在系统初始化后就开始读入内存并显示到场景中。之后,视点不断的远离该文件模型,超出0-100这个范围,那么PagedLOD何时释放这个文件中数据所占的内存?

我做了一下试验,就类似上面叙述那种方法,不过不是不断远离模型,而是在模型显示范围之外较远处停留一段时间,发现进程占用内存数量一直为减少。

该用户从未签到

发表于 2010-5-12 08:16:28 | 显示全部楼层
DatabasePager的管理策略是:记录当前系统中PagedLOD节点的总数目;当这个数目超出指定数值时,开始对所有的PagedLOD排序并选出“保持在显示范围以外的时间最长”的节点,将其释放

这个总数目可以通过DatabasePager::setTargetMaximumNumberOfPageLOD来调节,默认为100

该用户从未签到

 楼主| 发表于 2010-5-12 10:15:40 | 显示全部楼层
哦~很长知识啊,呵呵~

另外还有一个问题,我在Windows资源管理器中观察过PagedLOD程序运行时的内存占用量。在场景中,当进入一个模型文件的现实范围时,开始读硬盘,进程的内存占用量一直上升,之后又会下降,降到一个值时保持不变了,此时该模型显示在场景中。这种内存使用量先上升后下降是什么原因?

该用户从未签到

发表于 2010-5-12 10:31:33 | 显示全部楼层
这个不好判断了,也可能是任务管理器本身的延时性和不精确性,也可能是OpenGL内存的一些处理工作

该用户从未签到

发表于 2012-12-25 09:04:02 | 显示全部楼层
array 发表于 2010-5-12 08:16
DatabasePager的管理策略是:记录当前系统中PagedLOD节点的总数目;当这个数目超出指定数值时,开始对所有的 ...

请问,要是PagedLOD的节点数没有达到默认的数量,是不是说就没有进行数据的释放呢?

该用户从未签到

发表于 2012-12-25 09:18:30 | 显示全部楼层
在可视范围之外,pageLOD节点数据占用的内存是不是不释放?
观察进程的内存占用量,无论可视范围怎么变化,内存占有量一直不变,我想让不在可视范围的节点数据释放,该怎么做?

该用户从未签到

发表于 2012-12-25 09:55:19 | 显示全部楼层
只要没有达到设置的最大数量值,那么无论在视野外与否都不会释放节点,这样可以避免因为镜头改变而可能产生的反复加载卸载的情形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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