我正在查看在模拟器中运行我的应用程序时Monotouch内存分析器的输出。 我可以看到这些数字:
Object count: 154.043
Total memory: 5.099.648 bytes
“总内存”是否意味着,我占用了大约5MB的RAM?仪器向我展示了大约30MB的分配,这就是我要问的原因。
答案 0 :(得分:5)
Total memory
是所有托管对象使用的内存量。分析器只会累加每个对象使用的内存。
这不是过程中使用的内存总量,原因有两个:
MonoTouch不会基于每个对象分配内存。 MonoTouch改为以块的形式分配内存,当创建新对象时,通常会分配已分配的内存。在任何情况下,这通常都是您可以在分析器报告的总内存和应用程序使用的实际内存量之间忽略的差异(并且这不是使用5MB管理内存和30MB仪器报告之间差异的原因)。
MonoTouch(以及它的探查器)不知道本机代码分配的任何内存。例如,如果你创建一个UIImage,图像数据完全保存在本机代码中,它不会显示在我们的探查器中(您将在探查器中看到UIImage实例,但每个实例使用的内存将是使用的托管内存) ,不包括图像数据)。另一个示例是,如果从xib加载视图:如果不以某种方式从托管代码访问对象树,则不会为树中的任何对象创建托管对象,并且托管中不会显示任何内容探查。这是来自托管分析器的5MB与30MB仪器报告之间的真正区别。
另外请记住,MonoTouch本身将在模拟器中使用比在设备上更多的内存,因为在模拟器上它已经被调整为快速编译(以尽可能快地进行调试),而在设备上它被调整以获得更好的运行时性能