Xamarin.Forms:加载图像时内存不足

3

我的应用程序需要加载相同的图像多次。因此,我需要管理内存使用情况,因为经过几次迭代后,内存就会耗尽。我正在尝试使用垃圾回收器,但它没有起作用。我是在我的内容页面(Content Page)中这样做的。

我的代码如下:

private async Task ExecuteTests(string imageResource) 
{

    // Do stuff

    for (int q = 0; q < NUMBER_OF_TESTS; q++) {

        // Do some work

        await LoadImageAsync (imageResource);

        // Do stuff

        if (q < NUMBER_OF_TESTS - 1) {
            stkImage.Children.Remove(mImageTested);
            mImageTested = null;
            GC.Collect ();
        }
    }
}

private async Task LoadImageAsync(string imageURI) 
{
    mImageTested = new Image { Aspect = Aspect.AspectFit };
    Task<ImageSource> result = Task<ImageSource>.Factory.StartNew(() => ImageSource.FromFile(imageURI));
    mImageTested.Source = await result;
    stkImage.Children.Add(mImageTested);
}

我认为你在示例中犯了一个错误。它向stkImage.Children添加了几个新的图像,然后删除了最后一个。其他图像仍然存在于stkImage.Children中,因此GC.Collect()无法将它们删除。我还想知道为什么您需要为同一图像制作多个图像?难道您不能多次使用一个图像的引用吗?这将节省您的内存。 - Jacco Dieleman
@JaccoDieleman,这是为了研究生目的。我正在创建一种基准测试。在这部分工作中,我需要加载大约50次图像并测量平均加载时间。我可以手动完成这个过程,例如运行每个执行并测量其时间,然后计算平均值,但如果可能的话,我想在循环内完成这个过程。如果我只使用一个图像引用,我的测量结果将不够精确。我尝试使用以下代码:
  • 添加一个图像
  • 如果它不是最后一个执行,则删除它并调用GC.Collect()
- Bernardo Rocha
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接