C# 防止BitmapDecoder使用导致SystemOutOfMemoryException

C# 防止BitmapDecoder使用导致SystemOutOfMemoryException,c#,wpf,out-of-memory,imagesource,C#,Wpf,Out Of Memory,Imagesource,我正在开发一个科学的图像捕获应用程序,其中连续的网络摄像头帧被保存为单个图像(与视频编码相反) 文件保存到zip存档中,当加载捕获进行分析时,每次查询给定位置的帧时,都会通过方法LoadImage()在以下类中生成BitmapFrame: public class ImagemCinemetria { public int Index { get; private set; } public byte[] ImageBytes { get; private set; }

我正在开发一个科学的图像捕获应用程序,其中连续的网络摄像头帧被保存为单个图像(与视频编码相反)

文件保存到zip存档中,当加载捕获进行分析时,每次查询给定位置的帧时,都会通过方法
LoadImage()
在以下类中生成
BitmapFrame

public class ImagemCinemetria
{
    public int Index { get; private set; }

    public byte[] ImageBytes { get; private set; }

    public BitmapSource Imagem
    {
        get
        {
            if (_imagem == null)
                _imagem = LoadImage();
            return _imagem;
        }
    }
    BitmapSource _imagem;


    // CONSTRUTOR
    public ImagemCinemetria(int index, byte[] jpegBytes)
    {
        Index = index;
        ImageBytes = jpegBytes;
    }



    private BitmapSource LoadImage()
    {
        using (var stream = new MemoryStream(ImageBytes))
        {
            var decoder = new JpegBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
            return decoder.Frames.First();
        }
    }
}
问题是,只要我开始导航捕获(通过移动类似于视频播放器的滑块光标)并开始加载
位图帧
,就会有巨大的内存消耗,很快我就会得到
SystemOutOfMemoryException


我隐约知道WPF位图有一些缓存选项,但我不确定该怎么办。

我最终自己找到了解决方案

无论
JpegBitmapDecoder
占用这么多内存的原因是什么,实际的问题是属性
Imagem
在整个类生存期内都保持在内存中被引用

通过使用属性获取程序替换延迟加载,我摆脱了
OutOfMemoryException
,该属性获取程序每次调用时都会从头创建
BitmapFrame

所以不是

public BitmapSource Imagem
{
    get
    {
        if (_imagem == null)
            _imagem = LoadImage();
        return _imagem;
    }
}
BitmapSource _imagem;
现在我有

public BitmapSource Imagem => LoadImage();