Tôi đã dành gần một ngày để tìm hiểu lý do rò rỉ bộ nhớ trong Android. Có một hoạt động mà tôi mở/đóng nhiều lần (với bộ hẹn giờ). Sau một thời gian tôi đã nhận lỗi OutOfMemory:GC không nên chạy tự động trong Xamarin.Android trước khi hết bộ nhớ?
tôi thấy nhớ đi lên liên tục trong Xamarin Profiler mỗi khi hoạt động mở:
Tôi chắc chắn không có thuộc tính hoặc xử lý sự kiện có thể bị kẹt trong hoạt động đó. Tôi thậm chí đã xóa mọi hình ảnh, nút, v.v., cố gắng phát hiện những gì đã gây ra rò rỉ bộ nhớ. Vẫn như cũ ...
Sau đó, tôi đã thực hiện GC.Collect()
trong phương thức hoạt động chính của OnResume
(hoạt động mở ra hoạt động có vấn đề). Bây giờ tôi có thể thấy bộ nhớ đi lên và xuống như nó cần. Bạn có thể xem kết quả trong hình:
Theo Xamarin docs:
Các GC sẽ chạy khi đống nhỏ đã chạy ra khỏi bộ nhớ cho phân bổ mới
Nhưng điều đó không thực sự xảy ra
đọc liên quan: https://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/#Cross-VM_Object_Collections và http://stackoverflow.com/questions/ 28863058/xamarin-android-finalizer-không-get-gọi-khi-rời-the-hoạt động-to-go-to/28868582 # 28868582 – matthewrdev