Я получаю утечку памяти при загрузке нескольких объектов obj с файлом mtl с помощью three.js, вот мой шаг:
Сначала откройте эту страницу: http://idazhenhan.github.io/threejs/loader/index.html, после загрузки данных нажмите «загрузить», вы увидите несколько желтых сеток на экране, когда вы слегка двигаете мышью;
Затем, если вы используете окна, просто откройте диспетчер задач, посмотрите, сколько памяти занимает вкладка браузера, запишите это.
Наконец, нажмите «обновить» повторно нажмите «загрузить» или «очистить» в верхнем левом углу страницы, снова посмотрите на стоимость памяти в диспетчере задач, вы увидите , память растет и/или казалось никогда не освободится.
Я пишу код релиза в конце index.js, вот он:
function reload() {
var indexes = [];
for (var index in scene.children) {
if(scene.children[index].name.indexOf('test') !== -1){
indexes.push(scene.children[index]);
}
}
for(var index in indexes){
scene.remove(indexes[index]);
}
load();
};
Я изменил две основные функции:
function load() {
clear();
var paths = [];
for(var i=1;i<=4;i++){
paths.push({obj: i + '/model_1v.obj', mtl: i + '/model_1v.mtl'});
}
var onProgress = function(xhr) {
if (xhr.lengthComputable) {
var percentComplete = xhr.loaded / xhr.total * 100;
}
};
var onError = function(xhr) {};
THREE.Loader.Handlers.add(/\.dds$/i, new THREE.DDSLoader());
for(var i=0;i<paths.length;i++){
var path = paths[i];
var loader = new THREE.OBJMTLLoader();
loader.load(path.obj, path.mtl, function(model) {
model.name='test-' + i;
scene.add(model);
}, onProgress, onError);
}
}
function clear() {
THREE.Cache.clear();
var models = [];
for (var i in scene.children) {
if(scene.children[i].name.indexOf('test') !== -1){
models.push(scene.children[i]);
}
}
for(var i in models){
scene.remove(models[i]);
models[i].traverse(
function(obj){
if (obj instanceof THREE.Mesh) {
obj.geometry.dispose();
obj.material.dispose();
}
}, true
);
}
models.length = 0;
};
Но он по-прежнему недействителен, если вас это интересует, вы можете клонировать код здесь: https://github.com/idazhenhan/idazhenhan.github.io.git , затем запустите код на локальном сервере, и вы ясно увидите проблему.
Есть ли кто-нибудь, кто может помочь мне решить эту проблему?