首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WPF图像控件呈现时,大小为11 is的图像文件占用大量内存

使用WPF图像控件呈现时,大小为11 is的图像文件占用大量内存
EN

Stack Overflow用户
提问于 2009-06-30 09:24:18
回答 1查看 1.6K关注 0票数 0

当我试图将WPF图像源设置为一个图像文件,该文件的大小为11 MB,并在14 MeagaPixcel摄像机中拍摄时,当图像在屏幕上呈现时,内存将高达170 MB,并且在呈现后内存也不会下降。如果我尝试使用.Net 2.0 Picturebox控件进行同样的操作,所使用的内存仅为.5MB到1MB。逻辑上,如果一个图像的文件大小是11 at,那么它应该在最大时只占用11 at,同时呈现对吗?在WPF中这种行为的原因是什么?是否有任何方法来处理额外的垃圾内存呈现后,在屏幕上?

EN

回答 1

Stack Overflow用户

发布于 2009-06-30 09:28:06

要回答你问题的第一部分:

在数码相机上拍摄的图像被存储为jpg文件,因此被压缩。当读入内存时,它将被解压缩。这解释了你在这里看到的大小上的差异。

例如,佳能EOS 450上拍摄的照片在磁盘上的文件大小为3MB。它的尺寸是307x2048。这导致内存中的大小为3072 * 2048像素* 24位/像素= 18,874,368字节(这有意义吗--我从来没有百分之百地肯定这些计算)

在保存图像数据的对象超出范围并被垃圾回收清除之前,内存使用量不会下降。

例如,您需要类似于以下代码的内容:

代码语言:javascript
复制
using (Image image = Image.FromFile(imageName))
{
    // Non property item properties
    FileName = imageName;
    PixelFormat = image.PixelFormat;
    Width = image.Size.Width;
    Height = image.Size.Height;

    foreach (PropertyItem pi in image.PropertyItems)
    {
        EXIFPropertyItem exifpi = new EXIFPropertyItem(pi);
        this.propertyItems.Add(exifpi);
    }
}

一旦我从图像中获得了所需的所有信息,using语句就允许垃圾收集启动并释放内存。

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

https://stackoverflow.com/questions/1062672

复制
相关文章

相似问题

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