如何分析内存使用情况&使用仪器的性能?

时间:2011-07-10 14:08:23

标签: xcode performance profiling instruments allocation

在所有仪器跟踪模板中,我喜欢使用:

  • Zombies用于检测对象过度释放的位置,非常适合调试EXEC_BAD_ACCESS错误。
  • 泄漏以检测内存泄漏。
  • 核心动画w颜色混合图层用于检测帧速率&半透明的子视图,非常适合平滑UITableView滚动。

我总是听到有人说要分析我的应用内存使用情况和性能

  1. 为什么要分析内存使用情况&性能?我的应用运行正常。
  2. 我该怎么做?
  3. 我使用了Allocations,看到我的iPhone应用程序的总分配内存为1 MB,正常使用后增长到​​5 MB。 iPhone上的内存使用量是多少? iPad的? Mac吗?

3 个答案:

答案 0 :(得分:76)

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

当应用程序运行缓慢时,通常会执行性能分析。对其进行分析以查找代码中的慢点,以便您可以更快地运行代码。如果您的应用程序运行正常,则您不需要为性能进行分析。

要回答这些情况,请使用Allocations工具测量内存使用情况。 All Allocations类别中的Live Bytes列显示了您的应用当前使用的内存量。 Allocations工具的快照分析可以衡量应用中的内存增长。使用跳转栏左侧的菜单进行快照分析。

Time Profiler仪器可为您的应用配置性能。使用Time Profiler仪器的难点在于解释结果。 Time Profiler工具不会告诉您,您的应用程序将75%的时间花在功能X上。您必须深入挖掘数据以找到代码中的慢点。

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

答案 1 :(得分:7)

要解决马克答案中的一些评论:

分配实时字节不包括CALAYer / UIViews使用的OpenGL纹理内存。这是与Memory Monitor不同的根源。

在此处查看此问题的答案: Understanding the memory consumption on iPhone

答案 2 :(得分:3)

真正装入设备物理内存的内存是Resident Memory中的VM Tracker Instrument

Allocation Instrument仅标记由malloc/[NSObject alloc]创建的内存和一些框架缓冲区,例如,解压缩的图像位图不包含在Allocation Instrument中,但它总是占用大部分内存。

请观看WWDC 2012会话242 iOS应用程序性能:内存以获取Apple的信息。