我使用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