Ich verbrachte fast einen ganzen Tag damit, den Grund für ein Speicherleck in Android herauszufinden. Es gibt eine Aktivität, die ich viele Male öffne/schließe (mit einem Timer). Nach einer Weile wurde ich OutOfMemory Fehler bekommen:Sollte GC nicht automatisch in Xamarin.Android ausgeführt werden, bevor nicht genügend Arbeitsspeicher verfügbar ist?
ich die Erinnerung sah jedes Mal die Aktivität geöffnet ständig in Xamarin Profiler hinauf:
stellte ich sicher, es gab keine Immobilien oder Event-Handler, die in dieser Aktivität stecken bleiben könnten. Ich habe sogar jedes Bild, Schaltflächen usw. entfernt, um herauszufinden, was den Speicherverlust verursacht hat. Immer noch das gleiche ...
Dann habe ich GC.Collect()
in der OnResume
Methode der Haupttätigkeit (die, die die problematische Aktivität öffnet). Jetzt kann ich sehen, wie die Erinnerung auf und ab geht. Sie können das Ergebnis im Screenshot sehen:
Per Xamarin docs:
Der GC wird ausgeführt, wenn der kleine Haufen aus dem Speicher für neue Zuweisungen
ausgeführt wird Aber das passiert nicht wirklich
Relevante Literatur: https://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/#Cross-VM_Object_Collections und http://stackoverflow.com/questions/ 28863058/xamarin-android-finalizer-nicht-immer-aufgerufen-wann-verlassen-die-aktivität-zu-gehen/28868582 # 28868582 – matthewrdev