我有一个非常简单的WPF应用程序,用于逐个预览给定文件夹中的图像。您可以将其视为Windows图像查看器克隆版。该应用程序具有PreviewKeyUp事件,用于在按下左箭头或右箭头键时加载文件夹中的上一张或下一张图像。
我试图解决的问题是,在加载多个图像直到垃圾收集发生时,会出现大量内存膨胀。您可以在我拍摄的应用程序内存使用截图中看到这一点。在垃圾收集发生之前,它很常见超过300 MB。
<Grid>
<Image x:Name="CurrentImage" />
</Grid>
private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Left:
DecreaseIndex();
break;
case Key.Right:
IncreaseIndex();
break;
}
var currentFile = GetCurrentFile();
CurrentImage.Source = new BitmapImage(new Uri(currentFile));
}
我试图解决的问题是,在加载多个图像直到垃圾收集发生时,会出现大量内存膨胀。您可以在我拍摄的应用程序内存使用截图中看到这一点。在垃圾收集发生之前,它很常见超过300 MB。
我尝试使用using语句来包装图像,但这不起作用,因为BitmapImage没有实现IDisposable。
using (var image = new BitmapImage(new Uri(currentFile)))
{
CurrentImage.Source = image;
}
当我在我的应用程序中加载多个图像时,我应该怎么做才能防止内存膨胀?