|
当待加载数据比较多或待并入场景的节点体积比较大时,程序常常会卡顿,必须承认,这暴露了数据源优化得不够或者调度策略上的不足,但是能否通过重写databasepager内部分函数的方式来改善这种状况呢?以下提出本人改动databasepager的一种设想:
当多线程完成待读节点队列(read_queue)的构建以及pagedlod节点的加载后,紧接着会更新场景(updategragh()),除了从场景中去除过期节点,还会将待加入的数据并入场景中(addLoadedDataToSceneGraph)。我们可以修改待加入数据并入场景这一步,不要直接把待合并列表(_dataToMergeList)里的节点一次性置换(swap)给本地文件加载列表(localFileLoadedList),因为这样的话renderingTraversals()时需要完成所有本地文件加载列表中节点的渲染工作,这些节点可能很多,也可能很复杂。这里,我们试着让合并列表中的节点一次只置换一个节点到本地文件加载列表中,那么渲染遍历阶段的任务势必会减少很多,这时在程序中看到的效果是pagedlod节点一个个依次出现在场景中,从而有效缓解卡顿现象,提高了帧率。
以上是本人的设想,希望大家能提出其中的缺陷,我这边暂时没有实现,重写databasepager后无法正常渲染,代码实现上还有点问题,所以不确定这种提高帧率的法子是否可行。我相信很多朋友可能已经通过类似的策略有效提高了帧率,希望能给点提示或者好的建议,先谢过!
|
|