我正在开发适用于 Windows Phone 8 的应用程序,但遇到内存泄漏问题。但首先是一些背景。该应用程序(不幸地)使用 WebBrowsers 作为页面工作。这些页面非常复杂,涉及到很多 javascript。
应用程序的native部分,用c#编写,负责与javascript进行一些简单的通信(例如native是javascript与服务器通信的委托),为页面转换、跟踪、持久性等制作动画。所有在一个独特的 PhoneApplicationPage 中完成。
在我因内存不足异常而崩溃后,我开始分析应用程序。我可以看到作为应用程序重要组成部分的 Web 浏览器正在正确处理。但我看到的问题是内存继续增加。更糟糕的是,我从探查器那里得到的反馈很少。据我了解,分析器图表说有一个大问题,而分析器数字说根本没有问题......
注意:该步骤表示从 WebBrowser 到另一个 WebBrowser 的导航。尖峰是由两个控件之间的动画创建的(我想)。在我在图像中选择的跨度中,我正在进行向前导航和向后导航,最多有 5 个 Web 浏览器(2 个用于始终存在的菜单,1 个用于索引页面,1 个用于我导航的页面和 1 个对于我导航到的页面)。在每次导航时,分析器都会显示正确数量的 WebBrowser:向前导航后 5 个,向后导航后 4 个。
注2:我添加了红线以更清楚地表明内存在这段时间内正在上升
正如您从图像中看到的那样 ,内存使用量非常大,但数字表明它很低,并且在这段时间内,保留分配比开始时要低......
我希望我已经包含了足够的信息。我想知道什么可能导致这个问题。到目前为止,我的想法是:
- WebBrowser 中的 javascript 做错了什么(例如,没有清理某些事件处理程序)。即使是这样,WebBrowser不应该在销毁时释放内存吗?
- 使用独特的 PhoneApplicationPage 是不应该做的事情,改变它的结构可能会导致这种情况。
-其他?
另一个问题:为什么图表显示正确的内存使用量而数字没有?
如果您需要有关分析器的更多信息,请询问,我将在明天发布。