Ho passato quasi un giorno intero a cercare di scoprire il motivo di una perdita di memoria in Android. C'è un'attività che apro/chiudo molte volte (con un timer). Dopo un po 'mi stavo errori OutOfMemory:GC non dovrebbe essere eseguito automaticamente in Xamarin.Android prima di esaurire la memoria?
ho visto la memoria salendo costantemente in Xamarin Profiler ogni volta che l'attività ha aperto:
ho fatto che non ci fossero proprietà o gestori di eventi che potrebbero essere bloccati in quella attività. Ho persino rimosso ogni immagine, i pulsanti, ecc., Cercando di individuare ciò che stava causando la perdita di memoria. Ancora lo stesso ...
Poi ho fatto GC.Collect()
nel metodo OnResume
dell'attività principale (quello che apre l'attività problematica). Ora posso vedere la memoria andare su e giù come dovrebbe. È possibile vedere il risultato nello screenshot:
Secondo Xamarin docs:
Il GC verrà eseguito quando l'heap minore ha esaurito la memoria per nuove allocazioni
Ma questo non sta realmente accadendo
lettura Rilevante: https://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/#Cross-VM_Object_Collections e http://stackoverflow.com/questions/ 28863058/xamarin-android-finalizer-not-getting-called-when-leaving-the-activity-to-go-to/28868582 # 28868582 – matthewrdev