【问题标题】:windows phone 8 : c# system out of memory exception : loading lots of images from the webwindows phone 8:c#系统内存不足异常:从网络加载大量图像
【发布时间】:2013-04-03 17:03:04
【问题描述】:

这是我在 Windows Phone 环境中开发的首批应用程序之一,因此我基本上是边学边学。我有一个带有枢轴控件的应用程序,并且在三个枢轴项中的每一个上都有一个 LongListSelector。当您滚动来自网络的图像时,图像会加载到 longlistselector 中,这是无限滚动(因为一旦在底部看到您的图像就会加载更多)。 但是,在测试中,如果我疯狂滚动以下载大量图像,则会出现以下错误:

'System.OutOfMemoryException' occurred in System.Windows.ni.dll

因为我每次都加载一些相同的图像,所以我实现了 PersistentImageCache (Kawagoe.Storage) 来缓存图像。

http://kawagoe.codeplex.com/wikipage?title=Storage.PersistentImageCache

我是否必须以某种方式在用户向下滚动时卸载图像,并在用户向上滚动时重新加载它们? 或者为每 X 图像清除内存? (我有 HTC 8S,所以对于内存更大的手机来说,这可能不是问题)。

非常感谢。

【问题讨论】:

  • 这显然不是一个解决方案,但我想到了,你为手机加载的图像的分辨率是多少?您使用的图片是否超出了屏幕尺寸所需的尺寸?
  • 您在项目中使用的是库的编译版本还是源代码?
  • @Caimen 原始图像是 400x300px,我将它们调整为 210x158px,所以那里有一点损失。
  • @NeilTurner 我只是直接在手机上运行(调试)。完全编译它会有所不同吗?
  • 是的,因为代码很旧并且是为 WP7 设计的。 WP8 中的存储处理方式也略有不同。另外,如果使用源代码会更容易调试。

标签: c# memory windows-phone-8 storage windows-phone


【解决方案1】:

由于您正在为 wp8 进行开发,因此请考虑对 longlistselector 使用网格布局,如本示例所示:

http://code.msdn.microsoft.com/wpapps/PhotoHub-Windows-Phone-8-fd7a1093

Afaik 他们做了许多先进的内存节省技术,例如分页 3 页内容、在项目实现方法上延迟加载内容和位图缓存。

显示 100 多个 hubtiles(臭名昭著的记忆棒)没有问题

额外提示: 您可以通过设置较低的 maximumflickvelocity 来控制滚动速度,从而让您有更多时间去做需要做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多