Xamarin monodroid - 如何跟踪.net内存泄漏

时间:2013-09-18 10:00:48

标签: memory-leaks mono xamarin.android xamarin

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

谢谢!

1 个答案:

答案 0 :(得分:1)

乔纳森昨天回答了我的一个类似的问题。看起来很有希望。 Take a look