假设我们有一个页面,上面有两个按钮,一个是创建,一个是销毁。当您单击“创建”时,下面的 Three.js 场景会动态添加到页面中并开始运行。点击“销毁”应该删除场景,释放所有缓冲区并释放所有内存等。
http://mrdoob.github.com/three.js/examples/webgl_test_memory.html
有没有人知道如何在不进行框架和更改网址的情况下实现这一点?
谢谢
谢谢
我认为你需要在几何体、材质和纹理中使用dispose()方法。
geometry.dispose();
material.dispose();
texture.dispose();
https://github.com/mrdoob/three.js/blob/master/examples/webgl_test_memory.html
JavaScript是一种垃圾回收语言。如果您不再引用某个对象(例如旧场景),则内存最终将被回收,除非实现中存在错误。您链接的页面似乎工作正常。
对于这个问题,我自己也烦恼了很久,向Chrome和Three.js提出了错误报告,但是没有找到任何解决方法。
由于某些原因,即使经过很长时间,内存也不会释放,似乎有些东西一直指向内存块,因此垃圾收集器永远不会将其释放。
然而,以下是为我解决问题的方法:
按照这种方式,我能够从Three.js场景中获得超过600MB的RAM。
更新
Mr. Doob和WestLangley的答案 Memory leak with three.js and many shapes,我还没有用我的代码进行测试。
在webGLRenderer中,使用
scene.remove( mesh )
之后,您可以使用
renderer.deallocateObject( mesh );
您可以使用以下代码释放纹理:
renderer.deallocateTexture( texture );