我使用OpenUI5/SAPUI5編寫測試應用程序,甚至在經過大量測試,優化和研究之後,我似乎仍然有內存泄漏。在SAPUI5/OpenUI5中創建和刪除視圖時發生內存泄漏
我有一個控制器連接到它的幾個視圖,並使用SAPUI5的SplitApp控件在它們之間導航。每當我導航回到我摧毀這樣的觀點:
// Get current page
var sCurrentDetailPage = this.oSpiltApp.getCurrentDetailPage().getId();
// Go back
this.oSpiltApp.backDetail();
this.oSpiltApp.removeDetailPage(sCurrentDetailPage);
// Destroy current page
sap.ui.getCore().byId(sCurrentDetailPage).destroy(true);
因爲我無法擺脫的所有視圖保持我手動添加摧毀它們在控制器的OnExit函數調用的元素內容(的OnExit是在銷燬視圖時調用)。儘管對視圖的摧毀呼喚也應該摧毀其子女,但這似乎擺脫了更多元素,但仍然不夠。 我只使用SAPUI5提供的事件並單擊處理程序,當調用destroy時應該將其分離,並且如果視圖訂閱了我在onExit中取消訂閱的事件。
問題:
如果我創建並導航到一個新的視圖,然後回去(破壞視圖)只有大約一半分配的內存似乎再次釋放。所以我會舉個例子,例如打開一個視圖,回過頭來看看Chrome中的堆快照,它顯示了20MB。然後我打開並關閉相同的視圖5次,最終以20.5 MB。因此,對於這個特定的視圖,銷燬它時不會刪除100KB。如果應用程序在整個使用過程中(它應該是這樣),這可能會導致舊的移動設備出現問題。 有沒有人有這個問題的經驗?非常感謝你。
編輯
我記錄與Chrome的時間軸中的內存使用。我反覆創造了兩個觀點並再次摧毀它們。對於JS堆我得到了以下結果:
所以它似乎隨着時間的推移大規模增長。
對於節點和聽衆我得到這個結果,這似乎是確定對我說:
你會說這是內存泄漏還是我反應過度?這個測試是否可靠?非常感謝你。
我注意到以下問題:http://stackoverflow.com/questions/33257288/how-remove-no-longer-used-odata-bindings-in-sapui5所以可能是你有類似的問題? – user3783327
@ user3783327感謝您的輸入。在我看來,即使沒有數據加載,視圖在被銷燬後仍然佔用大約150KB。所以這不僅僅是我的問題的數據。但是當我嘗試刪除它時,我會檢查數據會發生什麼。 – Ben