Monotouch Memory Profiler:"总内存"代表什么?

Kru*_*lur 2 memory-management xamarin.ios

我目前正在模拟器中运行我的应用程序时查看Monotouch内存分析器的输出.我可以看到这些数字:

Object count: 154.043
Total memory: 5.099.648 bytes
Run Code Online (Sandbox Code Playgroud)

"总内存"是什么意思,我占用了大约5MB的内存?仪器向我展示了大约30MB的分配,这就是我要问的原因.

Rol*_*nge 5

Total memory是所有托管对象使用的内存量.分析器只会累加每个对象使用的内存.

这不是进程中使用的内存总量,原因如下:

  • MonoTouch不会基于每个对象分配内存.MonoTouch改为以块的形式分配内存,当创建新对象时,通常会分配已分配的内存.在任何情况下,这通常是您可以在分析器报告的总内存和应用程序使用的实际内存量之间忽略的差异(并且这不是5MB管理内存与30MB仪器报告之间差异的原因).

  • MonoTouch(以及它的探查器)不知道本机代码分配的任何内存.例如,如果你创建一个UIImage,图像数据完全保存在本机代码中,它不会显示在我们的探查器中(您将在探查器中看到UIImage实例,但每个实例使用的内存将是使用的托管内存) ,不包括图像数据).另一个例子是如果从xib加载视图:如果不以某种方式从托管代码访问对象树,则不会为树中的任何对象创建托管对象,并且托管中不会显示任何内容探查.这是托管分析器和30MB仪器报告中5MB的真正区别.

还要记住,MonoTouch本身将在模拟器中使用比在设备上更多的内存,因为在模拟器上它已经被调整为快速编译(以尽可能快地进行调试),而在设备上它被调整以获得更好的运行时性能.