我正在编写一个需要显示大量图像的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?
提前致谢 儒略