我们正在尝试创建一个单页应用程序,用户可以在多个Three.js应用程序之间切换。然而,我们注意到选项卡的内存使用量不断增加。我们的应用程序中没有内存泄漏,而且Three.js变量似乎没有从RAM中清除。
重新创建的步骤
- 访问http://threejs.org/examples/并在Google Chrome中打开任务管理器,以注意相关选项卡的内存使用情况
- 在示例之间不断切换,您会注意到内存使用量不断增加,GC似乎从未发生过,或者无法解除先前消耗的内存块的连接
- 对于我的笔记本电脑,配置如下https://aboutmybrowser.com/pDp7aTxH当一切都开始冻结时,内存很容易突破1GB
我注意到chrome和firefox上有两个关于内存问题的bug,但还没有提供解决方案。
请帮助我如何释放记忆,我在网上找到的大多数东西都没有帮助。
附言:我也在Three.js上提交了一个bughttps://github.com/mrdoob/three.js/issues/4276
以下是的诀窍
- 创建一个数组,该数组将容纳添加到场景中的所有项目
- 每当向场景中添加额外项目时,请将其添加到此数组中
- 在destroy函数中,运行scene.remove('itemname')将它们从场景中移除
- 现在遍历数组并手动使所有项未定义
这样,我就可以在移动到另一个页面后释放超过600MB的内存。
更新杜先生和韦斯特兰利的回答内存泄漏与三个.js和许多形状
在webGLRenderer中,使用移除网格后
scene.remove( mesh )
,
你可以用解除内存分配
renderer.deallocateObject( mesh );
您可以使用取消分配纹理
renderer.deallocateTexture( texture );