用threejs释放内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用threejs释放内存相关的知识,希望对你有一定的参考价值。

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

我正在使用webglrenderer和缓冲几何来测量网格和窗口。

答案

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

首先尝试为对象设置原始值。

mesh.geometry.dispose();
mesh.geometry = null; // or undefined .
//also cool
delete mesh.geometry 

另一种方式(尝试一些黑客):

 mesh.geometry = VerySmallmesh.geometry  //see for three.js how to do this if this is not correct mesh.geometry = null; 
// try to override memory stack 

你必须确定这个对象只是他自己的一个例子(怎么说)。确保你没有克隆,如果你有,你也需要摧毁他。

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

另一答案

我在使用我的项目时也遇到了同样的问题。我怀疑你只是从场景中移除网格,而不是从内存中移除。尝试执行以下操作来释放内存。它正在为我工​​作。

if (mesh) {
    scene.remove(mesh);
    mesh.geometry.dispose();
    mesh.material.dispose();                                    
    mesh = [];
}

此外,请通过此StackOverflow讨论进一步说明。 freeing memory in three.js

以上是关于用threejs释放内存的主要内容,如果未能解决你的问题,请参考以下文章

ThreeJS TransformControl 释放控件

C++ 堆栈内存没有被释放

如何在android中使用imageloader释放位图内存?

Threejs部分应用纹理

jsch连接sftp后连接未释放掉问题排查

静态对象内存释放