我的单声道机器人程序中分配了大量内存,似乎不直接属于Dalvik或Mono堆。另外,我无法弄清楚如何跟踪.NET内存泄漏。
当我打电话
adb shell 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
我假设“未知”部分是单声道框架,包括.NET堆。但是当我打电话时
GC.GetTotalMemory(真)
它告诉我只分配了5Mb的内存。这留下了23Mb我无法追踪(并且有38Mb的已分配本机堆)
此外,我没有看到Xamarin有任何用于跟踪.NET内存泄漏的工具。我用
添加了垃圾收集日志记录adb shell setprop debug.mono.log gc,gref
但这非常冗长且难以阅读,甚至不包括分配大小。
此时我不知道如何追查导致的泄漏。由于分配似乎在本机堆上,我是否需要使用NDK来追踪正在发生的事情?我可以在C#端使用任何工具来跟踪.NET泄漏吗?
谢谢!