【问题标题】:Memory leak with three.js and many shapesthree.js 和许多形状的内存泄漏
【发布时间】:2012-10-08 08:19:37
【问题描述】:

我创建了一些代码,它们很快就会耗尽内存并死掉。

我已将其缩减为代码的环面生成/删除部分。我检查了场景数组和圆环数组的长度是否随着形状的移除而缩小,因此它们似乎得到了很好的管理,但我不确定内存泄漏的位置。

有什么想法吗?

http://jsfiddle.net/eVwP3/

【问题讨论】:

  • 你用的是什么浏览器?我在 Chrome 上运行了几分钟动画,并没有注意到动画开始后内存有任何增加。
  • Chrome 和 Firefox,但显然在 jsfiddle 中使用它似乎有帮助!正如 WestLangley 在下面指出的那样,我的问题的实际原因不是释放对象。

标签: javascript memory-leaks three.js


【解决方案1】:

在webGLRenderer 中,使用

删除网格后
scene.remove( mesh );

你可以释放内存

mesh.dispose();
geometry.dispose();
material.dispose();
texture.dispose();

参见http://threejs.org/examples/webgl_test_memory.html 和http://threejs.org/examples/webgl_test_memory2.html。

编辑:更新到 three.js r.69

附:不错的演示。您可能需要考虑创建对象池并重用它们,而不是不断地分配和解除分配。

【讨论】:

  • 从r52开始你还需要mesh.deallocate()geometry.deallocate()、material.deallocate()和texture.deallocate()。有了 ES6 的 WeakMap,就不需要这些了。
  • 另外,这个例子应该作为很好的参考:mrdoob.github.com/three.js/examples/webgl_test_memory.html
  • 但是是的,我会使用一个对象池(一个数组)并重用它们,而不是不断地创建和删除对象。
  • 解除分配一切正常,但我现在已将其调整为使用池。有一件事——我正在创建一个段复杂度取决于其初始大小的环面,但我无法弄清楚如何调整已经存在的环面的段——可以做到吗? jsfiddle.net/eVwP3/1
  • 此时您确实需要接受此答案并发布新问题,但您的环面问题的答案是否定的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2021-01-27
  • 1970-01-01
  • 2010-12-02
  • 2013-11-08
相关资源
最近更新 更多