如何从内存中删除先前的图像?
在图像网格中设置图像的方法:
public async Task Show(KeyValuePair<Image, Storyboard> imageStoryboard)
{
if (isVisible)
{
return;
}
isVisible = true;
this.ImageComponent = imageStoryboard.Key;
// элемент показан сохраняем его страницу
Models.Page.Save(ImageData.Page, ImageData.NextPageLink);
BitmapImage _bitmapImage = await GetBitmapImage(ImageData.ThumbnailUrl);
// если высота неопределена вычисляем её
if (Height == 0)
{
PixelHeight = _bitmapImage.PixelHeight;
PixelWidth = _bitmapImage.PixelWidth;
CalcHeight();
}
// параметры изображения
ImageComponent.Width = App.Settings.side_size;
ImageComponent.Height = Height - MARGIN;
ImageComponent.Margin = new Thickness(0, MarginTop, 0, 0);
Grid.SetColumn(ImageComponent, Column);
ImageComponent.DataContext = ImageData;
ImageComponent.Source = _bitmapImage;
// анимация
imageStoryboard.Value.Stop();
imageStoryboard.Value.Begin();
}
我设置了新来源ImageComponent.Source = _bitmapImage;
,但是如何从内存中删除以前的图像?当我加载越来越多的图像时,内存将丢失并且应用程序将关闭。当我加载以前的图像时,它们的加载速度是如此之快。
此加载图像的方法:https://pastebin.com/AWHpNCJU
您不能直接操作内存,应用程序将定期调用垃圾清理GC.Collect
来清理未使用的资源。但是此清理的前提是不再引用当前对象。因此,请检查您的图像资源是否没有及时释放。
UWP本身具有优化内存的能力,但这需要条件。例如,以下示例:
使用此
var bitmapImage = new BitmapImage();
myImage.Source = bitmapImage;
bitmapImage.UriSource = new URI("ms-appx:///static/posts/cool-image.png", UriKind.RelativeOrAbsolute);
不是这个
var bitmapImage = new BitmapImage();
bitmapImage.UriSource = new URI("ms-appx:///static/posts/cool-image.png", UriKind.RelativeOrAbsolute);
myImage.Source = bitmapImage;
此示例的含义是,请先将BitmapImage设置为Image.Source,然后再设置BitmapImage的源,这有助于应用程序的内存优化。
此外,对于高清图像加载,可以使用DecodePixel
减少内存使用量。具体内容可以在document中看到。
最诚挚的问候。