三js内存管理

use*_*250 13 javascript memory-management three.js

我有一个很大的场景,有很多Mesh和MorphAnimMesh.我想在删除网格时释放内存.如果我知道这是最好的方法:

for ( var i = scene.children.length - 1; i >= 0 ; i -- ) {
  var obj = scene.children[i];
  scene.remove(obj);
  obj.deallocate(); 
  obj.geometry.deallocate();
  obj.material.deallocate();
  obj.material.map.deallocate();
}
Run Code Online (Sandbox Code Playgroud)

如果我在此之后检查任务管理器的内存使用情况,则没有任何变化.(尝试等待几分钟的GC,但没有.)谷歌Chrome内存快照显示仍然存在的对象.THREE.Geometry @ 1862203等中的morphTargets

试图将obj设置为null,但仍然没有内存减少.

知道我做错了什么吗?

它是一款具有关卡的游戏,玩家可以从一个游戏变换到另一个游戏.经过几次更改后,内存使用量增加到很高.这就是为什么我想在级别更改之前从内存中删除所有对象.

Wes*_*ley 10

最有可能的是,您需要添加以下部分或全部内容:

geometry.dispose();
material.dispose();
texture.dispose();
Run Code Online (Sandbox Code Playgroud)

看看这些例子:

http://mrdoob.github.com/three.js/examples/webgl_test_memory.html

http://mrdoob.github.com/three.js/examples/webgl_test_memory2.html

three.js r.60