tiff 查看器 wpf 应用程序内存不足

tiff viewer wpf application out of memory

我正在处理一个 Tiff 查看器项目,该项目处理大型 24 位彩色 tif 文件(>70MB)。 这是我如何加载 tif 文件的代码:

TiffBitmapDecoder tbd = new TiffBitmapDecoder(new Uri(_strTiffPath),BitmapCreateOptions.DelayCreation, BitmapCacheOption.Default);
_frames = tbd.Frames;

我使用默认缓存选项来防止将整个文件加载到内存中。

我的应用程序有一个侧面缩略图视图(带图像的垂直 StackPanel)和一个查看所选缩略图的页面视图。

我通过这段代码只加载可见的缩略图:

internal static BitmapSource GetThumbAt(int i)
{
    try
    {
        if (i >= _frames.Count)
            return null;

        BitmapFrame bf = _frames[i];
        bf.Freeze();
        return bf;
    }
    catch (Exception ex)
    {
        return null;
    }
}

我的问题是当我向下滚动缩略图视图以加载新的可见页面时,内存负载增加并且我 运行 内存不足!

我尝试卸载不可见页面(已加载),但这没有帮助!

img.Source = null

谢谢你帮我解决这个问题。

我明白了! 正如我之前的评论中提到的,this article 对我帮助很大。 我只是将它改编为我的代码,现在内存正在正确卸载。 以下是我对代码所做的修改:

internal static BitmapSource GetThumbAt(int i) 
{
    try
    {
        if (i >= _frames.Count)
            return null;

        BitmapFrame bf = _frames[i];
        BitmapSource bs = bf.Clone() as BitmapSource; //make a copy of the original because bf is frozen and can't take any new property
        BitmapUtility.AddMemoryPressure(bs);
        return bs;
    }
    catch (Exception ex)
    {
        return null;
    }
}