小编Max*_*eng的帖子

OutOfMemoryException @ WriteableBitmap @后台代理

我有一个Windows Phone 8应用程序,它使用后台代理:

  1. 从互联网获取数据;
  2. 基于用户控件生成图像,该用户控件使用步骤1中的数据作为数据源;
  3. 在用户控件中,我有Grid&StackPanel和一些文本和图像控件;
  4. 当某些图像使用安装文件夹中的本地资源(/ Assets/images/...)时,用户从手机的照片库中选择了我用作背景的其中一个,因此我必须使用C#设置源代码背后.

但是,当它在后台运行时,它会得到OutOfMemoryException一些故障排除:

  1. 当我在"前线"中运行该过程时,一切正常;
  2. 如果我注释掉更新进度,并直接创建图像,它也可以正常工作;
  3. 如果我没有设置背景图像,它也可以正常工作;
  4. OutOfMemoryException在期间抛出var bmp = new WriteableBitmap(480, 800);
    我已经缩水为1280*768到800*480的图像大小,我认为这是一个全屏幕的背景图像的底线,不是吗?
  5. 经过一些研究,我发现出现这个问题是因为它超过了周期性任务的11 MB限制.
  6. 我试过DeviceStatus.ApplicationCurrentMemoryUsage用来跟踪内存使用情况:

    - 限制是11,534,336(位)

    - 当后台代理启动时,即使没有任何任务,内存使用量也变为4,648,960

    - 从互联网获得更新时,它增长到5,079,040

    - 完成后,它回落到4,648,960

    - 当调用开始时(从用户控件生成图像),它增长到8,499,200

嗯,我想这就是问题所在,它几乎没有可用于渲染图像的内存WriteableBitmap.

知道如何解决这个问题吗?

有没有更好的方法从用户控件/或其他任何东西生成图像?

实际上原始图像可能只有100 kb左右,但是,在渲染时WriteableBitmap,文件大小(以及我猜想的所需内存大小)可能会增长到1-2MB.

或者我可以从任何地方释放内存吗?

================================================== ============

顺便说一下,当这个Code Project文章说我在周期性任务中只能使用11MB内存时;

但是,这篇MSDN文章说我可以使用Windows Phone 8 Update 3最多20 MB或25 MB; 哪个是对的?为什么我处于第一种情况?

================================================== ============

编辑:

说到调试器,它在MSDN文章中也有说明:

When running under the debugger, memory and timeout restrictions …

c# writeablebitmap windows-phone-8

7
推荐指数
1
解决办法
1066
查看次数

标签 统计

c# ×1

windows-phone-8 ×1

writeablebitmap ×1