如何使用Instruments分析内存使用情况和性能?

ma1*_*w28 52 performance xcode profiling allocation instruments

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

  • 僵尸来检测对象被过度释放的位置,非常适合调试EXEC_BAD_ACCESS错误.
  • 漏洞检测内存泄漏.
  • 核心动画w颜色混合图层可检测帧速率和半透明子视图,非常适合平滑UITableView滚动.

我总是听到人们说要描述我的应用程序的内存使用情况和性能.

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

我使用了Allocations,看到我的iPhone应用程序的总分配内存为1 MB,正常使用后增长到​​5 MB.iPhone上的内存使用量是多少?iPad的?苹果电脑?

Mar*_*zyk 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应该不是问题.

  • Xcode使用100 MB的RAM将是伟大的;) (8认同)
  • 我发现Allocations工具在我的应用实际使用了多少内存时会产生误导.它倾向于给出远低于实际内存使用量的数字.Memory Manager仪器将为您提供应用程序在Real memory列中使用的实际内存量.我正在开发一个OpenGL游戏,并且左右都有低内存警告.Allocations说我只使用了12M的RAM,Memory Manager说我使用的是100M.所以,你去吧. (7认同)
  • @Ian请参阅http://stackoverflow.com/a/8797272/287403看起来活字节更准确,因为内存工具中的"真实内存"列继续显示您很久以前发布的块并且操作系统没有'回收.另请参阅http://stackoverflow.com/a/7574959/287403,其中我认为整体字节应排列得更靠近'真实内存' (3认同)
  • 感谢您提供如此全面的答案!:) (2认同)

Cal*_*vin 7

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

分配实时字节不包括由CALayer/UIViews使用的OpenGL纹理内存.这是与Memory Monitor不一致的根源.

请在此处查看此问题的答案: 了解iPhone上的内存消耗