|
王锐老师,
您好,本人结合实践遇到的问题,查阅您写的《最长的一帧》,其中在第十二日讲解中,您分别介绍了DatabasePager中的4个列表,分别负责对象弃用、数据请求、等待编译和等待合并。在本节的最后您提到通过updateBlock函数放行DatabasePager线程,之后取出_childrenToDeleteList中的所有对象,并安全的将它们析构。
我的问题是取出_childrenToDeleteList中的所有对象后,如何将它们安全的析构呢?我查看了run()函数,在do...while()循环中新建了一个局部静态变量(ObjectList deleteList),然后通过swap()函数将_childrenToDeleteList中的对象转给了deleteList。您所说的将对象析构是否就是通过do...while()循环结束时deleteList的生命周期终止,自动析构其中对象?我有以下几个问题:
1)deleteList是否是等待一次循环结束时自动删除节点对象?如果是的话,是否会引起暂时的内存周转不开状况,因为一次循环中后边还会通过readnode读取新的节点以及节点挂载数据,而此时deleteList中的数据还未删除。我如果在swap()之后直接通过deleteList.clear()清空列表是否可以实现第一时间清楚数据?我担心列表中存储的是地址,是否会引起内存泄露?
2)我加载影像瓦片数据,当视口下边数据达到很大时,当我delete掉根节点后,数据可以很快被析构,内存会被释放;但是加载模型数据后,同样的操作下内存不会析构很多,感觉像内存泄露了。但是每个模型节点都是会用的pagelod的指针挂在父节点下,难道说是关联的纹理没有被析构吗?模型是ive的,纹理是dds的。这个还请老师帮忙分析一下。 |
|