使用CanvasRenderer可能发生内存泄漏

时间:2013-12-19 07:25:16

标签: javascript three.js

我的应用程序中遇到内存泄漏。我设法将其归结为一个简单的测试用例:http://jsfiddle.net/729sv/

在场景中添加和删除几何体时,似乎存在泄漏。

当小提琴开始时,打开一个JavaScript控制台并单击该对象几次。请注意,打印Three.js __objectsRemoved []数组并且永远不会为0(我认为这意味着垃圾收集器永远不会删除它们。)

以类似的方式,如果您使用Chrome配置文件 - >记录堆分配功能,启动应用程序,单击几次,停止配置文件并过滤“网格”,您会注意到有很多THREE.Mesh仍然在浏览器方面。

如果您将渲染器切换为WebGLRenderer这两个问题都会消失。

这是CanvasRenderer中的错误还是错误地使用

1 个答案:

答案 0 :(得分:2)

这是CanvasRenderer中的一个错误。见ThreeJS garbage collection issue

scene = new THREE.Scene();

if ( renderer instanceof THREE.CanvasRenderer ) {

    scene.__lights = { length: 0, push: function(){}, indexOf: function (){ return -1 }, splice: function(){} }
    scene.__objectsAdded = { length: 0, push: function(){}, indexOf: function (){ return -1 }, splice: function(){} }
    scene.__objectsRemoved = { length: 0, push: function(){}, indexOf: function (){ return -1 }, splice: function(){} }

}