Three.js内存泄漏



我们正在尝试创建一个单页应用程序,用户可以在多个Three.js应用程序之间切换。然而,我们注意到选项卡的内存使用量不断增加。我们的应用程序中没有内存泄漏,而且Three.js变量似乎没有从RAM中清除。

重新创建的步骤

  1. 访问http://threejs.org/examples/并在Google Chrome中打开任务管理器,以注意相关选项卡的内存使用情况
  2. 在示例之间不断切换,您会注意到内存使用量不断增加,GC似乎从未发生过,或者无法解除先前消耗的内存块的连接
  3. 对于我的笔记本电脑,配置如下https://aboutmybrowser.com/pDp7aTxH当一切都开始冻结时,内存很容易突破1GB

我注意到chrome和firefox上有两个关于内存问题的bug,但还没有提供解决方案。

请帮助我如何释放记忆,我在网上找到的大多数东西都没有帮助。

附言:我也在Three.js上提交了一个bughttps://github.com/mrdoob/three.js/issues/4276

以下是的诀窍

  1. 创建一个数组,该数组将容纳添加到场景中的所有项目
  2. 每当向场景中添加额外项目时,请将其添加到此数组中
  3. 在destroy函数中,运行scene.remove('itemname')将它们从场景中移除
  4. 现在遍历数组并手动使所有项未定义

这样,我就可以在移动到另一个页面后释放超过600MB的内存。

更新杜先生和韦斯特兰利的回答内存泄漏与三个.js和许多形状

在webGLRenderer中,使用移除网格后

scene.remove( mesh )

你可以用解除内存分配

renderer.deallocateObject( mesh );

您可以使用取消分配纹理

renderer.deallocateTexture( texture );

最新更新