首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从多个图像中减少内存使用?

如何从多个图像中减少内存使用?
EN

Stack Overflow用户
提问于 2013-04-25 18:05:30
回答 2查看 733关注 0票数 2

我的应用程序从这里下载了六张图片,然后循环播放。我以GIF格式下载图像,使用.NET图像工具将其转换为PNG格式,并将每个图像作为BitmapImage存储在List<BitmapImage>中。

我用于将下载的图像添加到图像列表中的代码是:

代码语言:javascript
运行
复制
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,这会导致用户放大或移动我的图像时的性能问题。(我目前不显示图像,只是将它们存储在内存中。用于缩放和移动的图像是一个测试,它包含在内存测量的中。)

我也想增加下载的图像的大小,但是他们已经使用的内存数量使得这是不合理的。

EN

回答 2

Stack Overflow用户

发布于 2013-04-25 18:17:04

忘记压缩图像有多大。一旦从它创建了位图,它将是600x550x (可能是每个像素的字节)。所以你看到的每一张图片都超过1MB。在内存中,它们作为未压缩位图存储。这不包括30 is,但是如果您真的关心内存使用的细节,请使用类似SciTech的.NET内存探查器(试用版在这里:http://memprofiler.com/),您可以肯定地知道内存被占用的位置。

我不属于SciTech。在过去的十年中,我使用了几次分析器(包括在项目中经常使用它的几年时间)。我发现它是确定如何在.NET中使用内存的更精确的方法之一,否则我会发现很多猜测都是错误的假设。

票数 1
EN

Stack Overflow用户

发布于 2013-04-25 18:22:30

在我看来,我们可以在WP7上工作,因为移动的屏幕很小,我们不能像我们想要的那样显示图像的全部内容。我们可以下载,但不显示原始文件,我们应该减少宽度和高度,正确的屏幕上的手机。只有我的两分钱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16221673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档