众所周知,Windows Phone 8任务代理只能使用11.5MB内存。我试图在后台任务代理中制作动态锁屏图像。当我得到480 * 800图像时,它工作正常,但当我将其更改为768 * 1280时我是例外:
内存不足
1像素投射4 K
所以
(480 * 800 * 4)/1024/1024=1.46M
(768 * 1280 * 4)/ 1024/1024 = 3.75M
当我尝试将byte []转换为BitmapImage时:
public BitmapImage ConvertDownloadStringToStream(byte[] downloadImageBytes)
{
if (!(downloadImageBytes.Length > 0))
return null;
RationImageInfo currentRationInfor = GetBitmapImageWidthByDeveiceRatio();
BitmapImage convertBitmapImage = new BitmapImage() { DecodePixelWidth =768, DecodePixelHeight = 1280};
using (MemoryStream imageStream = new MemoryStream(downloadImageBytes))
{
convertBitmapImage.SetSource(imageStream);//out of memory
}
return convertBitmapImage;
}
我在SetSource()
方法中获得了内存不足异常。有没有人对此有任何建议?
答案 0 :(得分:2)
我猜测内存会增加。
尝试将其保存到文件中,释放变量/资源,而不是使用构造函数参数从文件加载它。
答案 1 :(得分:0)
尝试了很多次我一直在解决这个问题。 如你所见,它只有11M内存可以在windows phone taskagent中使用。我想要动态锁屏背景。我的解决方案是从服务器端下载图像并保存到本地显示它。
为什么会出现内存异常?
下载图片Byte [] =>写入内存=>使用768 * 1280构建writeableBitmap。
相同的图像记忆只投了三次。
所以如何解决?
从服务器端下载图像时。你应该立即保存到本地隔离存储并清除关于图像字节[]的内存使用情况。只需将图片网址设置为锁屏即可。得到了工作。
下载图片字节[] =>保存到local =>清除图像字节内存。
一切都很好。