2

我有一个包含大约 10 个项目的枢轴的页面,每个枢轴项目包含一个 longlistselector,每个项目有 30 个项目。

每个 longlistselector 项都包含一个图像。

当我浏览页面并翻到下一个数据透视项目时,应用程序在第 4 个数据透视项目崩溃并出现内存异常。

无论如何要卸载 longlistselector 中未显示的图像吗?

4

1 回答 1

2

我建议重新考虑您的应用程序布局,对于普通用户导航来说,10 个枢轴项目有点太多了,为什么不拥有一个带有“类别”长列表选择器的主页,然后是一个包含 30 个图像的详细信息页面。

但如果你绝对必须这样做,看看微软的 photohub 源

我个人使用它,在全景项目中加载数百张图像没有问题。

更好的是,如果您有时间,做一个内存配置文件并查看膨胀的确切位置,有时它可能是您的应用程序的某些部分占用了内存。

最后,wp 本身会自动缓存图像,但不是每个人都喜欢这种方式(我相信你不喜欢)

看看这个:

图像缓存

这是一个重要的问题,MSDN 目前对此保持沉默。如果您想知道为什么在清除源并从树中删除图像后没有释放图像内存,您很可能会看到图像缓存在起作用。这是一种预期的性能优化,以避免一遍又一遍地(下载)加载和解码相同的图像。相反,我们在内存中保留了一个缓存,我们可以轻松快速地重用它。这不是为了与下载文件的浏览器缓存混淆。

虽然这是一个不错且免费的性能优化,但有时它可能会不必要地破坏您的记忆,尤其是当您循环浏览许多您永远不会回来的图像时。它们的缓存将在您的应用程序的整个生命周期内耗尽内存。好消息是,当您决定不再需要缓存时,可以删除它:

BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;

聪明一点可以为您节省相当多的内存使用量,这是手机设备上的宝贵资源。在示例应用程序中,转到“缓存”页面并在显示/清除图像时监控内存使用情况。然后选中该框并重试。在示例案例中,您将看到 ~3MB 的差异。

你可以在这里获得完整的文章

于 2013-06-12T08:50:36.320 回答