tiff viewer wpf应用程序内存不足

时间:2016-03-14 13:08:34

标签: wpf memory thumbnails tiff out

我正在开发Tiff Viewer项目,该项目处理大型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

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

1 个答案:

答案 0 :(得分:0)

我明白了! 正如我之前的评论所述,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;
    }
}