System.OutOfMemoryException beim Lesen und Binden von Bildern aus dem isolierten Speicher

8

Dies ist der Code, den ich zum Binden von Bildern in XAML verwende

%Vor%

Gleichermaßen verwende ich 4 Rahmen um meine letzten Bilder anzuzeigen.

In meinem ViewModel verwende ich die folgende Methode zum Lesen von Bildern aus dem isolierten Speicher.

%Vor%

Und nachdem ich den Stream bekommen habe, benutze ich diese unten geschriebene Methode vier, indem ich die WritableBitmap für die UI-Bindung erstelle

%Vor%

In diesem Fall ist mein Problem nach dem Navigieren zu und von meiner Seite zwei- bis dreimal. Die App stürzt bei der BuildImage () -Methode ab, wo ich "image.SetSource (imageStream)" verwende. Methode. Ich habe viele Alternativen ausprobiert, aber gescheitert. Die Ausnahme ist "System.OutOfMemoryException"

Ich habe Bildkontrolle anstelle von Bildpinsel versucht.

Ich habe Bitmap anstelle von WriteableBitmap usw. versucht, aber das Ergebnis ist dasselbe.

Die App-Absturzrate verringert sich, wenn ich kleine Bilder verwende. Aber die Absturzrate ist hoch mit den Bildern, die durch die Kamera aufgenommen wurden.

Ich versuche für eine letzte Woche eine Lösung für dieses Problem, aber fand keine Alternative, um das Problem zu beheben.

Ich habe einen Link gefunden spricht über ein ähnliches Problem Aber hat nicht viele bekommen, um das Problem zu lösen

    
StezPet 24.04.2013, 07:08
quelle

4 Antworten

3
%Vor%     
Stephan Ronald 25.04.2013, 07:13
quelle
1

Silverlight speichert Bilder standardmäßig, um die Leistung zu verbessern. Du solltest anrufen image.UriSource = null nach dem Verwenden von BitmapImage, um die Ressourcen zu entfernen.

    
pantaloons 24.04.2013 21:06
quelle
1

Setzen Sie die IsolatedStorageFileStream und die IsolatedStorageFile zurück, nachdem Sie sie verwendet haben?

    
r wank 06.05.2013 12:01
quelle
1

Haben Sie versucht, den Garbage Collector dazu zu zwingen zu rennen, um zu sehen, ob das irgendeinen Unterschied macht?

%Vor%

Dies ist nicht als Lösung gedacht - Sie sollten nie GC.Collect aufrufen müssen, aber es kann helfen festzustellen, ob Ihr Problem ein Speicherleck oder nur eine Verzögerung im Speicher ist, der zurückgewonnen wird.

    
James Holderness 07.05.2013 01:08
quelle