Memory management 内存释放在Three.js中不起作用

Memory management 内存释放在Three.js中不起作用,memory-management,memory-leaks,three.js,Memory Management,Memory Leaks,Three.js,我在一个场景中有大量对象,但我无法使用以下代码释放内存: for (var i in all3DObj) { console.log("disposing"); scene.remove(all3DObj[i]); all3DObj[i].geometry.dispose(); if (all3DObj[i].material instanceof Array) { for (var j = 0; j < all3DObj[i].materi

我在一个场景中有大量对象,但我无法使用以下代码释放内存:

for (var i in all3DObj) {
    console.log("disposing");
    scene.remove(all3DObj[i]);
    all3DObj[i].geometry.dispose();
    if (all3DObj[i].material instanceof Array) {
        for (var j = 0; j < all3DObj[i].material.length; j++) {
            all3DObj[i].material[j].dispose();
            if (all3DObj[i].material[j].map) all3DObj[i].material[j].map.dispose();
        }
    } else {
        all3DObj[i].material.dispose();
        if (all3DObj[i].material.map) {
            all3DObj[i].material.map.dispose();
        }
    }
    all3DObj[i] = null;
}
for(all3DObj中的变量i){
控制台日志(“处置”);
场景.移除(all3DObj[i]);
all3DObj[i].geometry.dispose();
if(all3DObj[i].数组的材质实例){
对于(var j=0;j

如何有效地释放内存?

看起来还不错,只是补充:如果使用其他纹理(法线贴图等),可能还需要手动处理它们。您是否100%确定在其他任何地方都没有对这些对象的引用?您是否等到下一次完整GC运行后才测量可用内存?如何测量使用的内存?在
WebGLRenderer
中仍然存在一个可能导致您出现问题的未决问题,请参阅。尝试在您的
for
循环之后调用
renderer.renderLists.dispose()
。您可能想看看OK,非常感谢!我会尽快试一试。