2012-04-23 6 views
2

모노 가비지 수집기에 대한 문제가 안드로이드와 나는 그것을 연구하고 수동으로 GC.Collect()를 모든 OnDestroy() 메소드에 넣어야 만 오브젝트를 해제 할 수있다. 그 메신저도 사용하지 않는, 또한 Java.Lang.Objects에 대한 Dispose를 사용하려고하지만, 응용 프로그램은 여전히 ​​cosuming 및 메모리를 증가하고 있습니다. 어떻게 해결할 수 있습니까?모노 용 안드로이드 메모리 누수

+0

연구에 대한 자세한 정보를 제공 할 수 있습니까? –

+0

동일한 문제를 참조하는 링크를 제공 할 수 있습니다. – arkmetal

+0

http://docs.xamarin.com/android/advanced_topics/garbage_collection#Helping_the_GC – arkmetal

답변

6

기본 질문 : 실제 문제입니까? 가비지 콜렉터는 본질적으로 비 결정적이므로 메모리 사용은 상당히 다양합니다. 이것은 반드시 문제가되는 것은 아닙니다. 그것은 단지 사물의 일부입니다. 글로벌 레퍼런스를 정기적으로 사용하지 않거나 프로세스 힙을 다 써 버린 경우이 문제가 발생합니다. grefs가 증가하는 것을 볼 수는 있지만 컬렉션이 자연 스럽 게 발생하면 그렙은 줄어들지 만 걱정하지 않아도됩니다.

문제가있는 경우 문제가 무엇인지 구체적으로 알아야합니다. 예를 들어, Bitmap 인스턴스는 쉽게 exhaust memory이며, solutions for Bitmaps은 일반적으로 모든 것에 적용 할 수있는 것은 아닙니다.

자세한 내용을 보려면 Global Reference Messages에서 글로벌 참조가 작성 및 삭제 된시기를 확인할 수 있습니다.

또한 Google은 지속적으로 GC 휴리스틱을 업데이트하고 있습니다. Mono for Android 4.1.0은 플랫폼에 대한 최대 gref 값 (에뮬레이터의 1800 grefs)의 80 % 인 gref 임계 값에 도달하면 GC.Collet()이 자동으로 호출되는 변경을 도입했습니다. 이 경우 은 GC.Collect()을 호출해야하지만 GC는 "부적절한 순간"에 실행될 수 있기 때문에 많은 부분을 제거해야하므로 명시적인 GC.Collect()이 바람직 할 수 있습니다.