Мое приложение должно загружать одно и то же изображение определенное количество раз. Таким образом, мне нужно управлять использованием памяти, потому что после нескольких итераций у нее заканчивается память. Я пытаюсь использовать сборщик мусора, но он не работает. Я делаю это на своей странице содержания.Недостаточно памяти Загрузить картинку на Xamarin.Forms
Мой код выглядит следующим образом:
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);
}
Я думаю, что вы сделали misstake в вашем примере. Он добавляет пару новых изображений в stkImage.Children, а затем удаляет последний. Остальные все еще присутствуют в stkImage. Дети, поэтому GC.Collect() не может их удалить. Мне также интересно, почему вам нужно сделать несколько изображений для одного и того же изображения? Не можете ли вы просто использовать ссылку на одно изображение несколько раз? Это спасет вашу память. –
@ JaccoDieleman, он предназначен для выпускников. Я создаю своего рода бенчмарк. В этой части работы мне нужно загрузить изображение примерно в 50 раз и измерить среднее время его загрузки. Я мог бы сделать это вручную, например. запускать каждое исполнение и измерять его время, а затем вычислять среднее значение, но я хотел бы сделать это внутри цикла, если это возможно, конечно. Если я использую одну ссылку на изображение, моя мера не будет точной. Что я пытаюсь с этим кодом: - Добавить одно изображение - Если это не последнее исполнение, удалите его и вызовите GC.Collect() –