WP8:使用Pivot和LongListSelector的内存泄漏

时间:2014-01-23 20:24:55

标签: windows-phone-8

我的WP8应用程序中存在内存飞跃 我已经调查并缩小了问题,但我希望得到一些关于下一步的指导。 我确实有一个预感,Pivot和LongListSelector是原因,如下所述。

问题描述: 应用程序浏览多个页面(通常是几十页)。 内存使用量每页增加约2-4MB,而不是完全释放。 大约25页后,内存使用量从30MB增加到90MB。

现有代码: 在导航到下一页之前,我已经在每个页面上执行了一些清理工作。 我也在调用NavigationService.RemoveBackEntry()来保持Back Stack的小。

调查: 我使用了Memory Profiler,它显示了大约15MB的增长是我自己的数据没有被清理。 其余的40-50MB未包含在堆摘要中(即,总数仅在观察到的90MB中达到约15MB)。 我将处理15MB,但由于它似乎不是最重要的因素,我希望在合理的后续步骤上提供一些指导。

可能的原因: 我有另一组页面(浏览时通常是几十页),由非常相似的内容组成。 然而,这些页面没有显示相同的问题。整个内存使用量仍然很低。 导航时,两组页面都使用类似的清理代码。 一个关键的区别是受影响的页面使用了一个Pivot控件,每个控件都有一个3或4个Pivot项,其中一些包含LongListSelectors。 LongListSelectors是绑定到运行时生成的通用列表的数据。没有图像,只有文字。不是特别长的列表,每个都有20个左右的项目。 我偶然发现了一些帖子,这些帖子模糊地暗示这种控件组合容易受到内存泄漏的影响。 我评论了填充这些控件的代码,果然,内存使用现在达到50-60MB左右 如果我完全删除控件可能会更低(我还没有测试过)。 因此,这些控件并不是全部,但显然是问题的很大一部分。

问题: 这些控件是否存在已知问题(LongListSelector,Pivot)? 是否应该使用一些代码来清理这些控件?我已经尝试将列表ItemSource设置为空列表,但这对内存增长没有影响。 有没有办法解决它? (显然改变使用的控件类型是一种选择)。

感谢阅读。

2 个答案:

答案 0 :(得分:2)

经过一番调查后,我发现LongListSelector在清理内存时恢复内存有什么问题。

我已在此处发布了更多详细信息和解决方法:

http://cbailiss.wordpress.com/2014/01/24/windows-phone-8-longlistselector-memory-leak/

答案 1 :(得分:0)

我遇到了同样的问题。我所做的只是将源List<>更改为ObservableCollection<> s,然后更改 SelectedItem 更改我清除集合这在目前是不可见的。