3

我在我的单声道机器人程序中分配了很多内存,这些内存似乎不直接属于 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 泄漏吗?

谢谢!

4

0 回答 0