C# 内存不足,正在Xamarin.Forms上加载图像

C# 内存不足,正在Xamarin.Forms上加载图像,c#,xamarin.forms,out-of-memory,C#,Xamarin.forms,Out Of Memory,我的应用程序需要加载相同的图像一定次数。因此,我需要管理内存使用情况,因为经过几次迭代之后,内存就用完了。我正在尝试使用垃圾收集器,但它不起作用。我在我的内容页上这样做 我的代码如下所示: private async Task ExecuteTests(string imageResource) { // Do stuff for (int q = 0; q < NUMBER_OF_TESTS; q++) { // Do some work

我的应用程序需要加载相同的图像一定次数。因此,我需要管理内存使用情况,因为经过几次迭代之后,内存就用完了。我正在尝试使用垃圾收集器,但它不起作用。我在我的内容页上这样做

我的代码如下所示:

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);
}
专用异步任务执行测试(字符串imageResource)
{
//做事
对于(int q=0;qImageSource.FromFile(imageURI));
mImageTested.Source=等待结果;
stkImage.Children.Add(mImageTested);
}

也许这可以帮助您管理内存:


我认为你的例子有误。它向stkImage.Children添加了几个新图像,然后删除最后一个。其他的仍然存在于stkImage.Children中,因此GC.Collect()无法删除它们。我还想知道为什么需要为同一个图像制作多个图像?你不能多次引用一个图像吗?这会节省你的记忆。@JaccoDieleman,这是毕业用的。我正在创建一种基准。在这部分工作中,我需要加载一个图像大约50次,并测量加载它的平均时间。我可以手动执行,例如,运行每次执行并测量其时间,然后计算平均值,但如果可能的话,我希望在循环中执行。如果我使用一个图像参考,我的测量将不精确。我用这段代码尝试的是:-添加一个映像-如果它不是最后一次执行,请删除它并调用GC.Collect()