Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memory leak #56

Closed
argorus opened this issue Feb 1, 2018 · 9 comments
Closed

Memory leak #56

argorus opened this issue Feb 1, 2018 · 9 comments

Comments

@argorus
Copy link

argorus commented Feb 1, 2018

It happens when I use function setGeometry in a real time (inside a redrawing function of my project). Can you fix it or explain other ways to update geometry of lines?

@spite
Copy link
Owner

spite commented Feb 1, 2018

How are you updating the geometry passed to setGeometry? Can i see the relevant piece of code?

@argorus
Copy link
Author

argorus commented Feb 2, 2018

for(var i = 0; i < 2; i++)
		{
			var circlesGeometry = new THREE.Geometry();
			if( i == 0)
			{				
				for(var j = 0; j < (cLength*(bSum*20 + 4))/360; j += cLength/360) 
				{
					var v = new THREE.Vector3();
					v.set( 300*Math.cos(j), 300*Math.sin(j), 0);
					circlesGeometry.vertices.push(v);
				}
			}
			else
			{
				for(var j = cLength/2; j < ((cLength*(bSum*20 + 4))/360 + cLength/2); j += cLength/360) 
				{
					var v = new THREE.Vector3();
					v.set( 300*Math.cos(j), 300*Math.sin(j), 0);
					circlesGeometry.vertices.push(v);
				}
			}
			var mesh = scene.getObjectByName("circleX" + i);
			var curve_line = new MeshLine();
			curve_line.setGeometry(circlesGeometry);
			var new_mesh = new THREE.Mesh(curve_line.geometry, mesh.material);
			scene.remove(mesh);
			new_mesh.name = "circleX" + i;
			scene.add(new_mesh);
			new_mesh.position.z = -1900;
		}

@argorus
Copy link
Author

argorus commented Feb 2, 2018

It's a part of function "draw" which called using 'requestAnimationFrame'.

@spite
Copy link
Owner

spite commented Feb 2, 2018

scene.remove basically removes a child from its parent, but doesn't dispose of it.

THREE.MeshLine keeps its own internal THREE.BufferGeometry and resizes it accordingly. I think in your case you're not disposing of the original THREE.Geometry. Try calling .dispose() on circlesGeometry after .setGeometry and see if it helps with the leak.

@argorus
Copy link
Author

argorus commented Feb 2, 2018

Unfortunately, it doesn't work.
image

@yaodianmi
Copy link

I have the same problem

@mfurniss
Copy link

mfurniss commented May 1, 2019

I'm seeing a memory leak too. I'm spawning around 10 animated lines per second, and removing the lines when no longer required. The memory heap keeps growing and eventually crashes the app.

@AlexVestin
Copy link

AlexVestin commented May 19, 2019

You need to do all three geometry.dispose(), material.dispose() and scene.remove and there's no (at least from what I can notice) memory leak.

@argorus
Copy link
Author

argorus commented Jun 1, 2019

It helped to me using "mesh.material.dispose()" and "mesh.geometry.dispose()" in all places where i remove objects from scene. Now I haven't any memory leaks in my project. Thanks!

@argorus argorus closed this as completed Jun 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants