2013-12-19 96 views
0

我的应用程序中遇到内存泄漏。我设法把它归结为一个简单的测试案例:http://jsfiddle.net/729sv/使用CanvasRenderer可能的内存泄漏

当添加和删除场景中的几何时,似乎有泄漏。

当小提琴启动时,打开一个JavaScript控制台并单击对象几次。注意Three.js __objectsRemoved []数组被打印出来,并且永远不会到0(我认为这意味着垃圾收集器永远不会删除它们)。以类似的方式,如果您使用Chrome个人资料 - >记录堆分配功能,请启动应用程序,单击几次,停止配置文件并筛选“网格”,您会注意到有很多就浏览器而言,网格仍然存在。

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

这是一个错误的CanvasRenderer或不正确我

回答

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(){} } 

}