Out-of-memory-laden-Bild auf Xamarin.Formen
Meine app braucht zu laden, das gleiche Bild, eine bestimmte Anzahl von Zeiten. Somit brauche ich zum verwalten der Speicher-Nutzung, da nach ein paar Iterationen, es läuft out of memory. Ich bin versucht, Garbage-Collector, aber es funktioniert nicht. Ich Tue dies in meiner Content-Seite.
Mein code sieht wie folgt aus:
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);
}
Ich denke, Sie haben ein misstake in deinem Beispiel. Es fügt ein paar neue Bilder zu stkImage.Kinder-und entfernt dann die letzten. Die anderen sind noch in stkImage.Kinder, so der GC.Collect() nicht entfernen. Ich bin auch gefragt, warum Sie benötigen, um mehrere Bilder für das gleiche Bild? Können Sie nicht einfach den Verweis zu einem Bild mehrfach? Sparen Sie Arbeitsspeicher.
es ist für Diplom-Zweck. Ich Schaffe eine Art benchmark. In diesem Teil der Arbeit muss ich ein Bild laden rund 50 mal und misst die Durchschnittliche Zeit, um es zu laden. Ich könnte dies manuell tun, z.B. die Ausführung jeder Ausführung und Messen die Zeit, und dann den Durchschnitt berechnen, aber ich möchte diese in einer Schleife, wenn es möglich ist natürlich. Wenn ich ein Bild Referenz, meine Messung nicht so genau sein. Was ich versuche mit diesem code ist: - Fügen Sie ein Bild - Wenn es nicht das Letzte Ausführung, entfernen Sie es und rufen Sie GC.Sammeln()
es ist für Diplom-Zweck. Ich Schaffe eine Art benchmark. In diesem Teil der Arbeit muss ich ein Bild laden rund 50 mal und misst die Durchschnittliche Zeit, um es zu laden. Ich könnte dies manuell tun, z.B. die Ausführung jeder Ausführung und Messen die Zeit, und dann den Durchschnitt berechnen, aber ich möchte diese in einer Schleife, wenn es möglich ist natürlich. Wenn ich ein Bild Referenz, meine Messung nicht so genau sein. Was ich versuche mit diesem code ist: - Fügen Sie ein Bild - Wenn es nicht das Letzte Ausführung, entfernen Sie es und rufen Sie GC.Sammeln()
InformationsquelleAutor Bernardo Rocha | 2016-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht kann dies Ihnen helfen, verwalten Sie den Speicher:
https://github.com/luberda-molinet/FFImageLoading
InformationsquelleAutor Mario Galván