解除分配对象三个js

时间:2014-03-27 18:32:14

标签: javascript memory-management three.js webgl

我正在使用webGl和Three.js做一个项目。我的问题只有一个:

我需要释放内存,因为在游戏过程中,我必须创建很多对象,所以我不想分配大量的内存。我尝试了很多“代码”,但没有发生任何事情......

现在我用这个:

function deallocazioneScena(){
    for ( var i = scene.children.length - 1; i >= 0 ; i -- ) {
       deallocazioneObj(scene.children[i]);
    }
    //camera.position.set(0,50,70);
}

function deallocazioneObj(obj){
scene.remove(obj);
if (obj.geometry) {
    obj.geometry.dispose();
}
if (obj.dispose) {
    obj.dispose();
}   

}   

如何让这项工作成功?

1 个答案:

答案 0 :(得分:0)

浏览器会为您清理对象。当你取消引用对象时,浏览器将执行垃圾清理,所有这些都将被删除。

要测试这种情况发生的方式和时间,您可以使用Chrome中的时间轴标签。删除大对象后,最终应该看到“垃圾收集”事件。这表明浏览器已执行清理。

就明确而言,没有办法强制浏览器释放特定​​的内存。但是,依靠垃圾收集器通常很好,因为它在现代浏览器中相当快。不过,我会更关心你分配的对象数量。特别是在3D应用程序中,大量的对象分配(即使对于小对象)也会导致大量的堆流失,这可能会对渲染性能产生负面影响。