【问题标题】:Three.js memory leak三.js内存泄漏
【发布时间】:2015-10-23 16:41:22
【问题描述】:

我注意到 three.js (r73) 中有奇怪的内存泄漏。 重现步骤:

1)在谷歌浏览器中打开以下链接 (46.0.2490.80 m)

http://threejs.org/examples/#webgl_test_memory

2) 打开 DevTools -> Profiles -> Take Heap Snapshot。请参阅下面的屏幕截图:

3) 10 秒后拍摄另一个堆快照。如您所见,堆的大小增加了。

Snaphots

但是如果在没有任何服务器的计算机上本地打开此页面,堆大小将在 5-6 Mb 的范围内。

为什么在示例中使用的内存大小永久增加,而在本地页面打开的情况下保持不变?

提前致谢!

最好的问候,瓦西里。

【问题讨论】:

    标签: javascript memory-leaks three.js


    【解决方案1】:

    动态内存分配/释放示例不仅泄漏@示例链接:http://threejs.org/examples/webgl_test_memory.html,而且如果您从本地网络服务器运行它@ Three.js r74。

    GPU 内存利用率持平。

    该示例似乎被积极收集垃圾,并且当您运行文件路径而不是网络服务器时似乎没有泄漏。

    我尝试在我的测试中调用更多的 dispose 方法:

    function render() {
    				var geometry = new THREE.SphereGeometry( 50, Math.random() * 64, Math.random() * 32 );
    
    				var texture = new THREE.Texture(createImage());
    				texture.needsUpdate = true;
    
    				var material = new THREE.MeshBasicMaterial({ map: texture, wireframe: true })
    				var mesh = new THREE.Mesh( geometry, material );
    				scene.add( mesh );
    				renderer.render( scene, camera );
    
    				scene.remove( mesh );				
    
    				mesh.geometry.dispose();
    				mesh.material.dispose();
    				texture.dispose();
    				
    				renderer.dispose( mesh );
    				renderer.dispose(texture);
    				renderer.dispose(mesh.geometry);
    				renderer.dispose(mesh.material);
    			}

    【讨论】:

      【解决方案2】:

      我在 Firefox 中进行了相同的测试,并没有发现内存消耗有任何增加。他们要么修复了 Three.js 中的问题,要么与 chrome 的 webgl 引擎有关。

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 2015-10-18
        • 1970-01-01
        • 2017-12-21
        • 1970-01-01
        相关资源
        最近更新 更多