我的应用程序从这里下载了六张图片,然后循环播放。我以GIF格式下载图像,使用.NET图像工具将其转换为PNG格式,并将每个图像作为BitmapImage
存储在List<BitmapImage>
中。
我用于将下载的图像添加到图像列表中的代码是:
List<BitmapImage> images = new List<BitmapImage>();
//WebClient used for download
...
GifDecoder decoder = new GifDecoder();
ExtendedImage eim = new ExtendedImage();
decoder.Decode(eim, DOWNLOADEDIMAGESTREAM);
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap wbmp = eim.ToBitmap();
PngEncoder encoder = new PngEncoder();
encoder.Encode(eim, ms);
ms.Flush();
ms.Position = 0;
BitmapImage bmp = new BitmapImage();
bmp.SetSource(ms);
ms.Close();
images.Add(bmp);
}
e.Result.Dispose();
每个转换后的图像约为10-20 KB,大小为600 px550 20。(最初的GIF大约有2/3的大小。)
下载图片后,我的内存使用量约为80 MB。如果不下载图像,内存使用量约为50 MB。30 MB似乎是用来存储6个图像的大量内存,总大小约为90 KB。此外,它将我的帧减少到大约5或6,这会导致用户放大或移动我的图像时的性能问题。(我目前不显示图像,只是将它们存储在内存中。用于缩放和移动的图像是一个测试,它包含在内存测量的和中。)
我也想增加下载的图像的大小,但是他们已经使用的内存数量使得这是不合理的。
发布于 2013-04-25 18:17:04
忘记压缩图像有多大。一旦从它创建了位图,它将是600x550x (可能是每个像素的字节)。所以你看到的每一张图片都超过1MB。在内存中,它们作为未压缩位图存储。这不包括30 is,但是如果您真的关心内存使用的细节,请使用类似SciTech的.NET内存探查器(试用版在这里:http://memprofiler.com/),您可以肯定地知道内存被占用的位置。
我不属于SciTech。在过去的十年中,我使用了几次分析器(包括在项目中经常使用它的几年时间)。我发现它是确定如何在.NET中使用内存的更精确的方法之一,否则我会发现很多猜测都是错误的假设。
发布于 2013-04-25 18:22:30
在我看来,我们可以在WP7上工作,因为移动的屏幕很小,我们不能像我们想要的那样显示图像的全部内容。我们可以下载,但不显示原始文件,我们应该减少宽度和高度,正确的屏幕上的手机。只有我的两分钱。
https://stackoverflow.com/questions/16221673
复制相似问题