我在我的单声道机器人程序中分配了很多内存,这些内存似乎不直接属于 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(true)
它告诉我只分配了 5Mb 的内存。这留下了我无法追踪的 23Mb(并且有 38Mb 的已分配本机堆)
此外,我没有看到 Xamarin 有任何用于跟踪 .NET 内存泄漏的工具。我添加了垃圾收集日志
adb shell setprop debug.mono.log gc,gref
但这非常冗长且难以阅读,甚至不包括分配大小。
在这一点上,我不知道该怎么做才能追踪由此产生的泄漏。由于分配似乎在本机堆上,我是否需要使用 NDK 来追踪发生了什么?我可以在 C# 端使用任何工具来跟踪 .NET 泄漏吗?
谢谢!