当使用 Instruments 分析我的应用程序(查找内存泄漏)时,我使用 iOS 5 iPhone 模拟器得到的结果与使用运行 iOS 5 的 iPhone 4 得到的结果截然不同。第一张图片显示了使用真实设备进行分析的结果,第二个是模拟器:
真实设备:
iOS 5 模拟器:
在这两种情况下,此配置文件都会在应用程序中的同一点进行:在 rootViewController 的视图生命周期中完成 viewDidLoad。我一直在等待它们的总分配内存稳定下来。正如您在设备图表中看到的,在 00:10 左右发生了一些极端波动,而模拟器中不存在这种波动。在真实设备上,总分配内存在 00:08 左右从 1MB 跳至 3.5 MB,然后回落至 1.5 MB,最后跳至 4.74,并在此稳定。为模拟器分配的内存更加线性,它稳定快速地攀升至稳定的 2.35 MB 左右。
另一件需要注意的事情是设备上存在 2.25 MB 的已分配内存,但不是来自 malloc 的模拟器和来自 CFNumber 的 700+ KB。由于我对使用仪器和分析相对较新,因此我不确定这是否正常。谷歌快速搜索没有发现任何明确的结果。这 2.25 MB 和 700 KB 足以弥补内存分配的差异。为了平衡,模拟器测试中存在更多具有不同内存量的 malloc 条目,但设备测试中不存在这些条目。
另外,我发现当第二个 UIViewController 被推入 UINavigationController 堆栈时,分配的内存在真实设备上跳到大约 8.5-9 MB,但只有大约 4.5 到 4.5 MBtops在模拟器上。
我知道设备的性能与模拟器有很大不同,但是内存分配是否应该非常相似,因为两个设备上运行相同的代码?如果这是性能分析,我会理解,但对于内存分配,这些数字似乎应该非常相似。谁能解释一下这是否正常?
这种行为是可以预料的。从技术上讲,当您使用模拟器运行分析时,您正在根据桌面硬件测量统计数据。即使您只是分析分配,您也不能期望它们以类似的方式工作,因为许多软件优化/算法/等都是基于其运行的硬件。
不幸的是,Apple 没有 iOSemulator。不过,您最好使用设备进行分析,因为模拟器往往仍然不可靠且速度慢(例如 Android 模拟器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)