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 ヒープを含む mono フレームワークであると想定しています。しかし、私が電話するとき

GC.GetTotalMemory(真)

5Mbのメモリしか割り当てられていないことがわかります。それは私が追跡できない23Mbを残します(そして38Mbの割り当てられたネイティブヒープがあります)

さらに、Xamarin に .NET メモリ リークを追跡するためのツールがあるようには見えません。ガベージコレクションのログを追加しました

adb shell setprop debug.mono.log gc,gref

しかし、これは信じられないほど冗長で読みにくく、割り当てサイズも含まれていません。

この時点で、結果として生じるリークを追跡するために何をすべきかわかりません。割り当てはネイティブ ヒープ上にあるように見えるため、何が起こっているのかを追跡するために NDK を使用する必要がありますか? .NET リークを追跡するために C# 側で使用できるツールはありますか?

ありがとう!

4

0 に答える 0