1

当我使用scene.remove(mesh)删除网格时,我在释放三个js中的内存时遇到了一些问题,网格被删除了,但似乎js中使用的内存没有释放。

我在网格和窗口中使用带有缓冲几何体的webglrenderer。

2
  • 1
    你有一些闭合的网格参考吗?
    – 桶盖
    评论 2016年10月7日7:56
  • 1
    是的,但删除网格后,我将引用设置为null:( 评论 2016年10月7日8:52

2个答案2

重置为默认值
6

这可能是js内存使用的黑暗面。

首先尝试为对象设置基本体值。

mesh.geometrys.dispose();mesh.geometry=空;//或未定义。//“删除”也很酷,但不支持旧浏览器//delete关键字删除属性的两个值//以及财产本身。删除网格几何图形

另一种方法(试试黑客):

mesh.getometry=VerySmallmesh.gestometry//请参阅three.js,如果这不正确,如何执行此操作mesh.gETometry=null;//尝试覆盖内存堆栈

你必须确保这个物体是他自己的唯一实例(怎么说)。确保你没有克隆人,如果你有,那么你也需要摧毁他。

更新:我想再说一句,使用方法从forEach或for循环中的对象中清除数组。

5
  • 嗯,好吧,我会尝试调用dispose,看看是否有什么变化,但如果我有一些object3D和一些孩子,而每个孩子都有另一个孩子,我需要为每个网格调用dispose3D?有一种方法可以让每个孩子都轻松做到这一点吗? 评论 2016年10月7日15:06
  • 把它读到这一页的末尾(最重要的是在按钮页):github.com/mrdoob/tree.js/issues/5175然后看这个例子threejs.org/examples/#webgl_test_memory 评论 2016年10月8日11:39
  • 谢谢你,这似乎很管用,但需要时间来获得免费内存,有一种快速获得免费内存的方法吗?我这样问是因为我需要在一个1gbram的智能手机中使用3js 评论 2016年10月9日8:25
  • 在手机上,你需要进行大的修改,我建议你优化项目的各个方面。使网格稍微低一些,注意材质、纹理,甚至控制台。log可能会制造麻烦。。。你说得很好:“需要时间来获得自由记忆”。。。 评论 2016年10月9日12:15
  • 是 啊。。。我已经知道了。。。感谢您抽出时间:)我会接受这个答案,在桌面应用程序上运行良好,对于移动应用程序来说没有问题,我认为我可以管理反应组件生命周期中的网格 评论 2016年10月9日12:26
0

在处理我的项目时,我也遇到了同样的问题。我怀疑你只是从场景中删除网格,而不是从内存中删除网格。尝试执行以下操作以释放内存。这对我很管用。

if(网格){场景移除(网格);mesh.geometrys.dispose();mesh.material.dispose();网格=[];}

此外,请仔细阅读此StackOverflow讨论,以便进一步澄清。在三个.js中释放内存

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.