Spędziłem prawie cały dzień próbując odkryć przyczynę wycieku pamięci w systemie Android. Jest aktywność, którą otwieram/zamykam wiele razy (z timerem). Po chwili był już OutOfMemory błędy:Czy nie powinno zabraknąć GC automatycznie w Xamarin.Android, zanim zabraknie pamięci?
Widziałem pamięć dzieje się stale w Xamarin Profiler każdym razem aktywność otworzony
Upewniłem nie było żadnych właściwości lub programy obsługi zdarzeń, które mogą utknąć w tej czynności. Nawet usunąłem wszystkie obrazy, przyciski itp., Próbując wykryć przyczynę wycieku pamięci. Wciąż to samo ...
Potem zrobiłem GC.Collect()
w metodzie głównej aktywności OnResume
(tej, która otwiera problematyczne działanie). Teraz widzę, jak pamięć zaczyna się w górę iw dół, tak jak powinna. Można zobaczyć wynik w zrzucie:
zgodnie Xamarin docs:
GC będzie działał, gdy małoletni sterty zabrakło pamięci na nowe przydziały
Ale tak się nie dzieje:
Stosowna czytanie: https://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/#Cross-VM_Object_Collections i http://stackoverflow.com/questions/ 28863058/xamarin-android-finalizer-nie-wywołanie-kiedy-opuszczenie-działania-do-przejścia-do/28868582 # 28868582 – matthewrdev