我目前在使用ThreeJS应用程序时释放内存时遇到问题.
我知道有关于这个问题的几个问题:
我就用我做了以下打字稿函数处理我的对象:
function dispose( object3D: THREE.Object3D ): void
{
// Dispose children first
for ( let childIndex = 0; childIndex < object3D.children.length; ++childIndex )
{
this.dispose( object3D.children[childIndex] );
}
object3D.children = [];
if ( object3D instanceof THREE.Mesh )
{
// Geometry
object3D.geometry.dispose();
// Material(s)
if ( object3D.material instanceof THREE.MultiMaterial )
{
for ( let matIndex = 0; matIndex < object3D.material.materials.length; ++matIndex )
{
object3D.material.materials[matIndex].dispose();
object3D.material.materials[matIndex] = null;
}
object3D.material.materials = []; …Run Code Online (Sandbox Code Playgroud) 我的应用程序加载了很多网格.摆脱旧网格我试图处理它们.但记忆永远不会被释放.
我错过了什么吗?
我复制的简单例子:
chrome任务管理器说使用250mb内存,它与没有第2步的情况完全相同
MEMTEST
var scene = new THREE.Scene();
var mymesh=Array();
// 1. load a lot of geometry/meshes...
for(var i=0;i<100;i++)
{
var bloader;
bloader = new THREE.BinaryLoader();
bloader.load( "objekte/presto_6.js" , function( geometry )
{
mymesh.push(new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( {color:0xffffff } ) ));
scene.add(mymesh.length-1);
});
}
// 2. try to dispose objects and free memory...
for(var j=0;j<mymesh.length;j++)
{
mymesh[j].geometry.dispose();
mymesh[j].material.dispose();
screne.remove(mymesh[j]);
}
mymesh=Array();
</script>
Run Code Online (Sandbox Code Playgroud)