4
我的應用程序加載了很多網格。 擺脫舊的網格我嘗試處置它們。但內存永遠不會被釋放。釋放three.js中的內存
我錯過了什麼?
我再現簡單的例子:大二進制網格
- 負載100
- 處置所有的人再次
鉻任務經理說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>
我的下一個問題是,如果有可能只是刪除頂點/面/法線等方面的數據,當它被上傳到GPU。 我知道有幾何。動態=假;但頂點數據仍然存在我相信。我可以釋放那個記憶嗎?如果我嘗試像「zmesh.geometry.vertices = undefined;」 threejs不能訪問這個數組的長度。 – seattledirk
@pandrr:當然,如果你將'undefined'賦值給一個被用作數組的東西,那麼你實際上正在做'undefined.length',這是不可能的。你可以試試'zmesh.geometry.vertices = []'。 Howeve:JS是垃圾收集:你對內存沒有真正的控制權。如果你想自己管理每一個字節的內存,你必須編寫C :)你可以做一件簡單的事情來幫助GC不用全局作用域,只需在第一個函數中寫入'(function(){'你的腳本的行,並添加'}());'最後,_declare每var_ –
肯定它的邏輯,這是行不通的。它更像是一個3js的問題,如果可以釋放該數據,因爲它已經存儲在gpu中並且不會被改變,所以不需要再次訪問它。 – seattledirk