Was ist der richtige Weg, um Mesh Form Szene zu entfernen? In diesem Beispiel:DREI js richtig Entfernen von Objekt aus Szene (immer noch in HEAP reserviert)
removable_items = [];
box = new THREE.Object3D();
scene.add(box);
function add() {
var mesh = new THREE.Mesh(new THREE.IcosahedronGeometry(10, 5), new THREE.MeshPhongMaterial({color: 0xFFFFFF}));
box.add(mesh);
removable_items.push(mesh);
//clean(); ///// when is integrated in function memory is cleaned properly
}
function clean() {
if(removable_items.length > 0) {
removable_items.forEach(function(v,i) {
v.parent.remove(v);
});
removable_items = null;
removable_items = [];
}
}
function makeExperiment(r) {
var i = 0;
while (i < r) {
add();
i++;
if(r === i) console.log(r+' finnished ');
}
}
makeExperiment(50);
/// danach i mannualy clean();
gesetzt
Maschen in Szene nicht mehr sichtbar sind, wie erwartet, aber Schweller Speicher verwendet, die nach einiger Zeit fertig mit Speicherleck und Browser-Absturz.
Wo ist das Problem, hat THREE.js einige andere Referenzen gemacht?
Three.js R73
EDIT: clean();
wenn in Funktion (kommentierten nun in Code) -Speicher integriert ist richtig gereinigt. Aber wenn ich clean();
manuell nach makeExperiment();
eingestellt habe, wird der Speicher nicht als frei gesetzt.
Ich bin Blick auf diese - was für Programm/Tool verwenden Sie im Speicher suchen? – dcromley
Ihre Aussage 'neue THREE.IcosahedronGeometry (1, 5)' Der 2. Parameter ist Detail. Es als 5 zu haben macht viel Verarbeitung. Ist das der Teil Ihres Problems, den Sie beantwortet haben möchten? Der Standardwert ist 1. – dcromley
Ich benutze hohe Detail Mesh aus Gründen, um das Speicherbeispiel deutlich zu veranschaulichen. Es ist das gleiche Problem mit den JSON- oder OBJ-Modellen oder der Box-Geometrie, nur die makeExperiment-Funktion muss länger wiederholt werden. Ich verwende Chrome-Konsole und Chrome-Speicher-Snapshot. – Martin