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# 側で使用できるツールはありますか?
ありがとう!