2015-10-13 44 views
1

我在ScrollViewer中有Image,我将不时更改BitmapImage这是图像的来源。我发现应用程序的内存使用量超过了2GB,尽管图像总共只有100MB! (我不知道超过2GB可以分配给一个应用程序)并且有时会崩溃。内存使用量确实每隔一段时间变小,但速度不够快。我的假设(由于缺乏更好的设计,欢迎任何其他想法)是ScrollViewer正在缓存图像,即使在BitmapImage被另一个替换之后也不会释放该缓存。ScrollViewer中的图像发生内存泄漏

有没有办法告诉ScrollViewer不要缓存图像?

此外,如何检查内存在哪里?我使用的是VS2015,诊断工具显示的所有内存都是使用的内存总量。

+0

当您从滚动查看器中移除位图时,是否处理该位图? –

+0

@GianPaolo a)它是一个静态的BitmapImages组,总计100MB。 b)我究竟会如何处置BitmapImage(在回答这个问题之前 - 请参阅[this](http://stackoverflow.com/questions/33108983/dispose-of-a-bitmapimage))。 – ispiro

+0

如何直接在XAML中将图像添加到ScrollViewer? – Dani

回答

3

VisualStudio 2013将允许您profile memory usage。或者,您可以使用PerfView(由Microsoft提供)。两者都会告诉你哪些物体在吞噬你的记忆。我已成功使用这两个选项来确定类似于您的问题的根源。还有几个第三方工具可以做同样的事情。

也许对this other question的回复是有帮助的。看起来你需要冻结BitmapImages,然后再将它们作为你的ImageScrollViewer的来源。

我会发布此作为评论,因为我实际上没有解决方案,但我没有足够的代表。

+0

谢谢。 UWP中不提供冻结功能。至于其他 - 谢谢。他们至少是部分答案。 +1。 – ispiro