我有一个非常简单的WPF应用程序,它用于预览任何给定文件夹中的图像一次一个图像。您可以将其视为Windows映像查看器克隆。如果按下左箭头或右箭头键,则该应用程序具有用于加载文件夹中的上一个或下一个图像的PreviewKeyUp事件。防止内存膨胀当WPF中加载多个图像
<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;
}
如何在将多个图像加载到我的应用程序时防止内存膨胀?
你也可以看看这个:https://stackoverflow.com/a/6271982/1136211 – Clemens