【问题标题】:System.OutOfMemoryException: Inputting images into expanderviewSystem.OutOfMemoryException:将图像输入到扩展视图中
【发布时间】:2013-11-28 14:22:26
【问题描述】:

我正在尝试从数据库中取出图像,将其从字节转换为位图图像并将其放置在列表中的扩展视图中。该列表包含与数据库中的条目一样多的扩展视图。在您超过 6 个条目之前,这非常有效。然后它显示警告:

System.OutOfMemoryException:内存不足,无法继续执行程序

这是我的字节到位图转换器:

public class ByteToImageConverter : IValueConverter
{
    public BitmapImage ConvertByteArrayToBitMapImage(byte[] imageByteArray)
    {
        BitmapImage img = new BitmapImage();
        using (MemoryStream memStream = new MemoryStream(imageByteArray))
        {
            img.SetSource(memStream);
            memStream.Dispose();
        }
        return img;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        BitmapImage img = new BitmapImage();
        if (value != null)
        {
            img = this.ConvertByteArrayToBitMapImage(value as byte[]);
        }
        return img;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

【问题讨论】:

  • 如果有“使用”,则无需显式调用 Dispose()。
  • 这些字节数组有多大?
  • 很难用这么少的信息提供适当的帮助,无论如何你应该为你的图像实现一个延迟加载(和卸载)逻辑以避免内存泄漏。
  • 那是我微弱的调试尝试的一部分,我忘了摆脱它!您提到了延迟加载逻辑。这不是我以前遇到过的事情。我的转换尝试是否总是会导致内存泄漏?

标签: c# out-of-memory memorystream bitmapimage expander


【解决方案1】:

BitmapImage对象在使用完毕后需要释放。

【讨论】:

  • 您好,很抱歉回复缓慢。处理位图图像的最佳方法是什么?在.net的system.drawing命名空间中有dispose方法,但是这是一个没有绘图命名空间的windows phone应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2020-05-13
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多