UWP:如何从内存中删除图像?

问题描述 投票:1回答:1

如何从内存中删除先前的图像?

在图像网格中设置图像的方法:

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

c# memory uwp bitmapimage
1个回答
0
投票

您不能直接操作内存,应用程序将定期调用垃圾清理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中看到。

最诚挚的问候。

© www.soinside.com 2019 - 2024. All rights reserved.