WPF:从BitmapImage中释放RAM

时间:2017-12-05 22:01:50

标签: c# wpf caching mvvm bitmapimage

我正在编写一个需要显示大量图像的WPF程序。当我用MVVM模式编写时,我有一个带有BitmapImage的模型类:

class Model : INotifyPropertyChanged
{
    public string Filepath { get; set;}

    private BitmapImage image;
    public BitmapImage Image
    {
        get
        {
            if (image== null)
            {                  
                image = new BitmapImage(new Uri(Filepath));
            }
            return image;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void Changed([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我的ViewModel有一个ObservableCollection<Model> models。视图绑定到此集合中当前选定的项目,因此绑定到一个BitmapImage。

由于我需要能够在集合中拥有数百个模型实例,我需要在一段时间后删除缓存的图像,以避免使用严重GB的RAM。我试图通过image = null的Getter中的一个任务设置Image - 属性:

private BitmapImage image;
public BitmapImage Image
{
    get
    {
        if (image== null)
        {                  
            image = new BitmapImage(new Uri(Filepath));
        }
        Task.Run(async () => 
        {
            await Task.Delay(2000);
            image = null;
        }
        return image;
    }
}

但是当我浏览列表时,RAM使用率会增加,但永远不会减少。

如何从这些缓存的图像中释放RAM?

提前致谢 儒略

0 个答案:

没有答案