我们正在尝试创建一个单页面应用程序,用户可以在其中在多个 Three.js 应用程序之间切换。然而,我们注意到该选项卡的内存使用量不断增加。我们的应用程序中没有内存泄漏,并且 Three.js 变量似乎没有从 RAM 中清除。
重新创建的步骤
- Visit http://trijs.org/examples/并在 Google Chrome 中打开任务管理器以注意相关选项卡的内存使用情况。
- 不断在示例之间切换,您会注意到内存使用量不断增加,并且似乎 GC 从未发生或无法取消链接以前消耗的内存块。
- 对于我的具有以下配置的笔记本电脑https://aboutmybrowser.com/pDp7aTxH当一切都开始冻结时,内存很容易突破 1GB。
我注意到 chromium 和 firefox 上有 2 个关于此内存问题的错误,但尚未提供解决方案。
请帮助我如何释放内存,我在互联网上找到的大部分内容都没有帮助。
PS:我也在 Three.js 上提交了一个错误https://github.com/mrdoob/ Three.js/issues/4276
这就是对我有用的技巧
- 创建一个数组来保存添加到场景中的所有项目。
- 每当向场景添加额外的项目时,请将其添加到此数组中。
- 在 destroy 函数中,运行 scene.remove('item name') 将它们从场景中删除。
- 现在迭代数组并手动使所有项目未定义。
这样,我能够在移动到另一个页面后释放超过 600MB 的内存。
Update杜布先生和韦斯特兰利的回答Three.js 和多种形状的内存泄漏
在 webGLRenderer 中,删除网格后
scene.remove( mesh )
,
你可以释放内存
renderer.deallocateObject( mesh );
您可以使用以下命令取消分配纹理
renderer.deallocateTexture( texture );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)