2011-07-10 31 views
48

所有的仪器跟踪模板,我喜欢使用:如何使用仪器分析内存使用情况和性能?

  • 僵尸以检测对象越来越过度释放,伟大的调试EXEC_BAD_ACCESS错误。
  • 检测内存泄漏的泄漏。
  • 核心动画w彩色混合图层检测帧率&半透明子视图,非常适合平滑UITableView滚动。

我总是听到有人说我的应用程序的内存使用情况&的性能。

  1. 为什么我应该剖析内存使用情况&的性能?我的应用运行良好。
  2. 我该怎么做?

我使用分配,看到我的iPhone应用程序,开始于1 MB的总分配的内存,并成长为正常使用后5 MB。 iPhone上的内存使用量是多少? iPad的?苹果电脑?

回答

73

要回答这个问题,分析内存使用情况对于iOS应用尤其重要,因为iPhone和iPad的内存少于Mac。 iPhone 4有512 MB的RAM,但早期版本有256或128 MB。操作系统使用的RAM和多任务的因素,而且您的应用程序没有太多RAM浪费,因此了解应用程序使用多少内存很重要。

分析性能是您通常在应用程序运行缓慢时执行的操作。将其配置为在您的代码中查找缓慢点,以便您可以使代码运行得更快。如果您的应用运行良好,则无需进行性能分析。

要回答这个问题,请使用Allocations工具来测量内存使用情况。 All Allocations类别中的Live Bytes列会告诉您应用程序当前正在使用的内存量。分配工具的堆积分析可以测量应用程序中内存的增长。使用跳转栏左侧的菜单进行堆积分析。

时间分析器仪器会分析您的应用程序的性能。使用Time Profiler工具的难点在于解释结果。 Time Profiler工具不会告诉你,你的应用程序在Function X中花费了75%的时间。你必须仔细查看数据才能找到代码中的缓慢点。

关于可接受的内存使用情况,取决于您想要支持的设备和应用程序。像Xcode一样使用100 MB RAM的应用程序可以,但像TextEdit这样的使用100 MB单页文档的应用程序会成为问题。对于iOS应用程序,5 MB不应该是一个问题。

+2

谢谢你给出这样一个全面的答案! :) – ma11hew28

+6

我发现分配仪器是误导,当涉及到我的应用程序真正使用多少内存。它往往会使数字远低于实际的内存使用量。内存管理器仪器将为您提供您的应用程序在实内存列中使用的实际内存量。我正在开发一个OpenGL游戏,并且正在获取低位内存警告。配额说我只用了12M的内存,内存管理员说我用的是100M。所以,你去了。 – Ian

+3

@Ian参见http://stackoverflow.com/a/8797272/287403看起来好像活动字节更加准确,因为内存工具中的“真实内存”列继续显示您很久以前发布的模块,而且操作系统并未没有回收。另请参阅http://stackoverflow.com/a/7574959/287403,其中我相信整体字节应该更接近'真实内存' –

7

为了解决一些在马克的回答的评论:

分配现场字节不包括OpenGL的纹理内存,它使用的CALayer/UIViews。这是与Memory Monitor不一致的根源。

看到答案在这里这个问题: Understanding the memory consumption on iPhone

3

真正加载到设备的物理内存的内存是在VM Tracker InstrumentResident Memory

Allocation Instrument仅标志着malloc/[NSObject alloc]创建的内存和一些框架缓冲,例如,解压缩图像的位图中不包括Allocation Instrument但它总是最需要你的记忆。

请观看WWDC 2012 Session 242 iOS应用程序性能:内存从Apple获取信息。