2013-09-18 2 views
3

У меня много памяти, выделенной в моей программе mono droid, которая, по-видимому, не принадлежит ни к Dalvik, ни к моно-кучам. Кроме того, я не могу понять, как отслеживать утечки памяти .NET.Xamarin monodroid - как отслеживать утечки памяти .net

Когда я звоню

ADB dumpsys оболочки MemInfo MyProgram.Droid

Это выход:

** MEMINFO in pid 1364 [MyProgram.Droid] ** 
        Shared Private  Heap  Heap  Heap 
       Pss Dirty Dirty  Size Alloc  Free 
      ------ ------ ------ ------ ------ ------ 
    Native  36  24  36 38080 37775  124 
    Dalvik  6934 15164  6572 16839 15384  1455 
    Cursor  0  0  0 
    Ashmem  0  0  0 
Other dev  4  36  0 
.so mmap 12029  2416  9068 
.jar mmap  0  0  0 
.apk mmap 16920  0  0 
.ttf mmap  3  0  0 
.dex mmap  2299  296  8 
Other mmap  64  24  36 
    Unknown 28920  8216 28728 
    TOTAL 67209 26176 44448 54919 53159  1579 

Я полагаю, что в разделе "Unknown" является моно рамки, в том числе. NET куча. Однако, когда я называю

GC.GetTotalMemory (истина)

Он говорит мне, что только 5 Мб памяти выделяется. Это оставляет 23Mb, который я не могу отслеживать (и есть 38Mb выделенной родной кучи)

Кроме того, я не вижу, что у Xamarin есть инструменты для отслеживания утечек .NET. Я добавил протоколирования сбора мусора с

adb shell setprop debug.mono.log gc,gref 

Но это невероятно многословным и трудно читать и даже не включают в себя размеры распределения.

На данный момент я не знаю, что делать, чтобы отслеживать возникающие утечки. Поскольку распределения, по-видимому, находятся на нативной куче, мне нужно использовать NDK для отслеживания того, что происходит? Существуют ли какие-либо инструменты, которые я могу использовать на стороне C# для отслеживания утечек .NET?

Спасибо!

ответ

1

Вчера Джонатан ответил на аналогичный вопрос. Выглядит очень многообещающе. Take a look!

Смежные вопросы