2011-12-12 30 views
8

当用仪器(寻找内存泄漏)分析我的应用程序时,iOS 5 iPhone模拟器与我的iPhone 4运行iOS 5。第一图显示从与实际设备中的分析结果,并且第二个是与所述模拟器:用仪器分析内存泄漏 - iPhone 4和iOS 5之间的巨大差异模拟器

真实设备:

Real device


iOS 5的模拟器:

Simulator

此配置文件带到了同一个点,在这两种情况下的应用:viewDidLoad中完成在RootViewController的认为生命周期。我已经等待了他们的总分配内存稳定。正如您在设备图表中看到的,在00:10左右会出现一些极端波动,这些波动在模拟器中不存在。在真实的设备上,总分配的内存在00:08左右,从1MB跳到3.5 MB,然后回到1.5 MB,最后跳到4.74,在那里稳定下来。模拟器的分配内存更加线性,稳定并迅速攀升至2.35 MB左右,稳定下来。

要注意的另一件事是设备上存在2.25 MB的已分配内存,而不是来自malloc的模拟器和CFNumber的700+ KB。由于我对使用仪器和分析相对比较陌生,我不确定这是否正常。 Google的快速搜索没有任何明确性。这超过了2.25 MB和700 KB,弥补了内存分配的差异。为了平衡,在模拟器测试中存在不同数量的内存的malloc中有更多的项目不存在于设备测试中。

而且,我发现,当第二UIViewController中被压入堆栈的UINavigationController,分配的内存跳转到约8.5-9 MB在实际设备上,但只有约4.5至4.5,也许兆在模拟器上衣

我知道预计该设备的性能与模拟器有很大不同,但是由于两个设备上运行的代码相同,所以内存分配不是很相似?我会理解,如果这是性能分析,但对于内存分配,似乎这些数字应该非常相似。任何人都可以阐明这是否正常?

+0

任何与硬件相关的东西(CPU,内存,声音......)都不相信模拟器。应用名称时,“模拟器”不是“模拟器”(仿真实际设备行为)。另外需要注意的是,当你在模拟器中进行午餐时,应用程序实际上被编译为桌面应用程序(它可以在Mac上本地运行),使用活动监视器可以看到它正在运行 – Andy

+0

您应该发现* leaks *是相同的双方。 –

回答

8

此行为是预期的。从技术上讲,当您使用模拟器运行分析时,您正在测量基于桌面硬件的统计数据。即使你只是分析分配,你也不能指望它们以类似的方式工作,因为很多软件优化/算法等都是基于它所运行的硬件。

不幸的是,苹果公司没有iOS 仿真器。尽管如此,你仍然可以更好地分析设备,因为仿真器往往仍然不可靠并且速度很慢(例如Android模拟器)。

+0

那么为什么真正的设备上分配的内存比模拟器上要多得多呢? –

+0

它可以是任何东西。正如imnd所说,模拟器运行一个桌面应用程序。您的Mac上的应用程序和设备上的应用程序加载不同的库,创建不同的对象,针对不同的事情进行优化。 –

3

你应该总是在iOS设备上运行泄漏,而不是在模拟器上运行泄漏。你从模拟器中得到的结果只会作为一个分心,因为它们很少100%准确。你会发现自己追逐了很多红鲱鱼! hehehe

3
I know it is to be expected that the device would perform much differently from the Simulator, but should memory allocation not be pretty similar because the same code is being run on both devices? I would understand if this is a performance profiling, but for memory allocation, it seems that the numbers should be pretty similar. Can anyone shed some light as to whether this is normal or not? 

从技术上讲,代码是完全不同的。模拟器应用程序为x86字节码编译,而器件编译为armv6/armv7。