我正在开发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
谢谢你帮我解决这个问题。
答案 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;
}
}