instruments简单使用手册

来源:互联网 发布:甲午中日战争知乎 编辑:程序博客网 时间:2024/05/23 20:42

instruments使用手册

instruments的作用:辅助编程人员分析程序性能、定位各种性能问题产生的原因,进行性能优化。

【一】应用性能分析报表:

1、cpu使用率 真机调试时,查看运行状态标签,CPU一栏:最高使用,最低使用,平均使用

2、线程状态 真机调试时,查看运行状态标签,CPU一栏:app总计开启线程数转到Instruments,操作app,可以看到当前活动线程,并可以看到创建这个线程的调用方法

3、内存使用率 真机调试时,查看运行状态标签,memory一栏:动态监测内存状态 Instruments——Activity Monitor :内存使用总览

4、磁盘使用情况 真机调试时,查看运行状态标签,disk一栏:动态监测磁盘使用情况,读取,写入,文件打开数

5、网络使用流量 Instruments——NetWork 动态监测上传和下载的数据流量

6、url响应时间采样分析 在响应页面查看听云打印log

7、电量消耗 Instruments——energyDiagnostics

8、GPU使用情况 Instruments——GPU Driver [Device utilization]

9、帧率+页面结构和渲染 Instruments——CoreAnimation

10、内存申请情况 Instruments——Allocation

11、内存泄露 Instruments——Leaks

12、操作执行时间追踪 Instruments——timerProfile


【二】 定位性能问题

上文提到的众多工具中,一部分只能展示出app运行时的性能数据,这一部分工具没有定位问题到具体的代码调用点的能力,一般来说对我们调试性能和debug来说比较重要的工具有以下几个:
(1)、leaks——检查内存泄露(基本使用)
使用方法:
这里写图片描述

1、暂停程序
2、观察leaks有无内存泄露,用标尺选择需要产生内存泄露的时间区域
3、选择calltree,查看代码调用树
4、选择反转调用栈+隐藏系统库调用两个选项(使detail区域展示更加清晰)
5、观察detail区,此时应该能发现我们自己编写的方法调用
6、查看调用栈,直接锁定到具体出问题的代码上

(2)timerProfile (基本使用)
时间分析器工具用来检测CPU的使用情况。它可以告诉我们程序中的哪个方法正在消耗大量的CPU时间。
使用方法:
这里写图片描述
1、暂停程序
2、用标尺选择需要分析的时间区域
3、选择calltree,查看代码调用树
4、选择反转调用栈+隐藏系统库调用两个选项(使detail区域展示更加清晰)
5、观察detail区,此时应该能发现我们自己编写的方法调用 6、查看调用栈,直接锁定到具体出问题的代码上

(3)Allocation + Activity Monitor——检查内存申请
使用方法:
这里写图片描述
1、定位造成内存增长的操作;观察Activity Monitor,看内存是否稳定,如果内存不能稳定在一个特定的区间,而是一直增长,则说明出现了没有释放成功的问题

这里写图片描述
2、切换到Allocation,等之前操作全部结束,在没有干扰的情况下,开启分段检测,重复执行并且只执行步骤1定位到的操作,会发现堆的内存增长不为0(如果全部堆内存都被合理的释放掉了,那么每一段的堆内存增长量应该是0)。
3、在detail窗口中选择只执行了步骤1定位到的操作 的这段detail,开启calltree,查看调用栈,锁定这一次操作中所有可能申请内存的方法
4、屏蔽掉无关的代码,只保留带有步骤1定位到的操作 的代码,执行程序,如果还有内存不释放的问题,说明定位准确,然后根据实际情况解决问题
5、invite call tree 选择之后,会在details区中展示调用栈最里层的方法,不方便查找,所以不勾选
6、在Generation标签(选择call tree 的地方)中,理想状态是每个generation区间相对于前一个generation区间的内存增长(memory growing)是0,如果不为0,则说明发生了内存可以申请但不能释放的问题。

(4)CoreAnimation + GPU Driver + timerProfile——检查图层问题
使用方法:
这里写图片描述

GPU占用过高,需要通过调整视图渲染方式解决,通过以下几种视图渲染选项调试:
Color Blended Layers - 这个选项基于渲染程度对屏幕中的混合区域进行绿到红的高亮(也就是多个半透明图层的叠加)。由于重绘的原因,混合对GPU性能会有影响,同时也是滑动或者动画帧率下降的罪魁祸首之一。
ColorHitsGreenandMissesRed - 当使用shouldRasterizep属性的时候,耗时的图层绘制会被缓存,然后当做一个简单的扁平图片呈现。当缓存再生的时候这个选项就用红色对栅格化图层进行了高亮。如果缓存频繁再生的话,就意味着栅格化可能会有负面的性能影响了(更多关于使用shouldRasterize的细节见第15章“图层性能”)。
Color Copied Images - 有时候寄宿图片的生成意味着Core Animation被强制生成一些图片,然后发送到渲染服务器,而不是简单的指向原始指针。这个选项把这些图片渲染成蓝色。复制图片对内存和CPU使用来说都是一项非常昂贵的操作,所以应该尽可能的避免。
Color Immediately - 通常Core Animation Instruments以每毫秒10次的频率更新图层调试颜色。对某些效果来说,这显然太慢了。这个选项就可以用来设置每帧都更新(可能会影响到渲染性能,而且会导致帧率测量不准,所以不要一直都设置它)。
Color Misaligned Images - 这里会高亮那些被缩放或者拉伸以及没有正确对齐到像素边界的图片(也就是非整型坐标)。这些中的大多数通常都会导致图片的不正常缩放,如果把一张大图当缩略图显示,或者不正确地模糊图像,那么这个选项将会帮你识别出问题所在。
Color Offscreen-Rendered Yellow - 这里会把那些需要离屏渲染的图层高亮成黄色。这些图层很可能需要用shadowPath或者shouldRasterize来优化。
Color OpenGL Fast Path Blue - 这个选项会对任何直接使用OpenGL绘制的图层进行高亮。如果仅仅使用UIKit或者Core Animation的API,那么不会有任何效果。如果使用GLKView或者CAEAGLLayer,那如果不显示蓝色块的话就意味着你正在强制CPU渲染额外的纹理,而不是绘制到屏幕。
Flash Updated Regions - 这个选项会对重绘的内容高亮成黄色(也就是任何在软件层面使用Core Graphics绘制的图层)。这种绘图的速度很慢。如果频繁发生这种情况的话,这意味着有一个隐藏的bug或者说通过增加缓存或者使用替代方案会有提升性能的空间。

我们平时主要关注的是Color Blended Layers和Color Offscreen-Rendered Yellow
这里写图片描述

一般我们的程序写完之后,使用CoreAnimation + timeProfile + GPUDriver 这三个工具测试一下,如果平均帧率在55+FPS,且GPU和CPU都没有过多占用,就没有必要进行视图优化
视图性能优化的原则就是平衡CPU与GPU的工作,二者任何一个占用率过多都会导致界面卡顿

CPU占用通过TimerProfile工具的查看 running time 确定
GPU占用通过GPUDriver工具查看Renderer Utilization 和 Tiler utilization 确定

详细的Instruments调优实例
http://wiki.jikexueyuan.com/project/ios-core-animation/performance-tuning.html

(5)Analyze——静态分析
使用方法:
这里写图片描述

点击等待编译通过,查看编译结果标签,可能出现问题的代码都会出现在编译结构标签里

这里写图片描述
Analyze主要分析以下四种问题:
  1、逻辑错误:访问空指针或未初始化的变量等;
  2、内存管理错误:如内存泄漏等;
  3、声明错误:从未使用过的变量;

【三】调优经验和这几天看帖的杂乱收获
       1 tableView中,如果cell高度由内容相关,需要对高度进行缓存
       2 tableView中,cell中的图片优先使用PNG格式的
      3 tableView中,cell高度固定,使用tableView.rowHeight = 100 这种方式设置cell高度
     4 tableView中计算高度的方法http://www.csdn.net/article/2015-05-19/2824709-cell-height-calculation
http://www.tuicool.com/articles/iMNrAf

0 0
原创粉丝点击