让我们说我们有一个带有两个按钮的页面,创建和销毁。当您单击创建此内存测试中的Three.js场景时,下面的动态添加到页面并开始运行。单击destroy应删除场景,处理所有缓冲区并释放所有内存等。 http://mrdoob.github.com/three.js/examples/webgl_test_memory.html
有没有人知道如何在不构建场景和更改网址的情况下执行此操作?
感谢
答案 0 :(得分:2)
我认为你需要在侧面几何体,材质和纹理中使用dispose()方法。
geometry.dispose();
material.dispose();
texture.dispose();
https://github.com/mrdoob/three.js/blob/master/examples/webgl_test_memory.html
答案 1 :(得分:1)
JavaScript是一种垃圾收集语言。如果您不再对某个对象(如旧场景)有任何引用,那么最终将回收内存,除非某个实现中存在错误。您链接的页面似乎工作正常。
答案 2 :(得分:1)
我自己对这个问题感到困扰,因为Chrome和Three.js长期提出错误报告,但无法找到任何解决方案。
由于某些原因,即使很长一段时间后内存仍然没有释放,似乎有些东西一直指向内存块,因此垃圾收集器永远不会释放它。
然而,这就是我的诀窍
通过这种方式,我能够从Three.js场景中获得超过600MB的RAM。
更新
Doob先生和WestLangley先生的回答Memory leak with three.js and many shapes,我还没有用我的代码测试这个。
在webGLRenderer中,用
删除网格后 scene.remove( mesh )
,
你可以用
解除内存 renderer.deallocateObject( mesh );
您可以使用
取消分配纹理 renderer.deallocateTexture( texture );