De mémoire de chargement de l'image sur Xamarin.Les formes

Mon application doit charger la même image d'un certain nombre de fois. Ainsi, j'ai besoin de gérer l'utilisation de la mémoire parce que, après quelques itérations, il est à court de mémoire. Je suis en train d'utiliser le Collecteur d'Ordures, mais il ne fonctionne pas. Je suis en train de faire cela dans ma Page de Contenu.

Mon code ressemble à ceci:

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);
}
  • Je pense que vous avez fait un misstake dans votre exemple. Il ajoute quelques nouvelles Images de stkImage.Les enfants et puis supprime le dernier. Les autres sont encore présents dans stkImage.Les enfants de sorte que le GC.Collect() ne peut pas les supprimer. Je me demande aussi pourquoi vous avez besoin de faire des Images multiples pour la même image? Tu ne peux pas utiliser la référence à une Image plusieurs fois? Qui vous permettra d'économiser de la mémoire.
  • il est diplômé de l'objet. Je suis entrain de créer une sorte de référence. Dans cette partie du travail que j'ai besoin de charger une image autour de 50 fois, et mesure le temps moyen de le charger. Je pourrais le faire manuellement, par exemple exécuter chaque exécution et la mesure de son temps et de calculer ensuite la moyenne, mais je voudrais le faire à l'intérieur d'une boucle, si c'est possible bien sûr. Si j'utilise une image de référence, à ma mesure ne sera pas précis. Ce que j'essaie avec ce code: - Ajouter une image, Si elle n'est pas la dernière exécution, retirez-la et appelez GC.Collect()