У меня много памяти, выделенной в моей программе 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?
Спасибо!