2016-11-19 6 views
1

Как удалить сетки из сцены three.js полностью, не вызывая утечки памяти. Я мог обнаружить, что загрузка одних и тех же моделей снова и снова вызывает крах браузера, поэтому кажется, что память не освобождается.Каков наилучший способ полностью удалить сетку из сцены в three.js?

ответ

6

Используйте метод dispose по геометрии и материалу. Кроме того, убедитесь, что ничто не держит ссылки на эти объекты, так как это предотвратит сбор мусора.

var myMesh = new THREE.Mesh(geo, mat); 
scene.add(myMesh); 
//... 
scene.remove(myMesh); 
myMesh.geometry.dispose(); 
myMesh.material.dispose(); 
myMesh = undefined; 
+0

Я знаю, что это старый, но представьте, было ли мешем свойство объекта в массиве. если вы очистите массив, вам нужно установить значение = undefined? Я заметил, что меньше GC, когда я реализую ваше предложение. –

+0

Я не знаю, почему вы видите _reduced_ GC. Вы должны видеть то же _или more_, что и ваш метод очистки массива. Тем не менее, я не помню, к какой версии тр.js это применялось (я должен был отметить это в моем сообщении, извините). Я имею в виду, что это уже не может быть проблемой в текущей версии, и может быть достаточно метода очистки массива. Выполнение моментального снимка кучи до и после каждого метода очистки для сравнения дельт сокращения в объектах «Геометрия»/«Буферная геометрия» – TheJim01

Смежные вопросы